惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - 叶小钗
C
Check Point Blog
宝玉的分享
宝玉的分享
Attack and Defense Labs
Attack and Defense Labs
www.infosecurity-magazine.com
www.infosecurity-magazine.com
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Application and Cybersecurity Blog
Application and Cybersecurity Blog
博客园 - Franky
V
V2EX
Hugging Face - Blog
Hugging Face - Blog
Google DeepMind News
Google DeepMind News
罗磊的独立博客
S
SegmentFault 最新的问题
S
Secure Thoughts
T
Troy Hunt's Blog
J
Java Code Geeks
Last Week in AI
Last Week in AI
酷 壳 – CoolShell
酷 壳 – CoolShell
W
WeLiveSecurity
Help Net Security
Help Net Security
S
Security @ Cisco Blogs
T
Threatpost
Apple Machine Learning Research
Apple Machine Learning Research
D
Darknet – Hacking Tools, Hacker News & Cyber Security
V2EX - 技术
V2EX - 技术
T
Tor Project blog
S
Security Affairs
T
Tailwind CSS Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
H
Hacker News: Front Page
腾讯CDC
博客园 - 司徒正美
The Last Watchdog
The Last Watchdog
N
News | PayPal Newsroom
博客园 - 聂微东
小众软件
小众软件
WordPress大学
WordPress大学
博客园 - 三生石上(FineUI控件)
爱范儿
爱范儿
C
CERT Recently Published Vulnerability Notes
AI
AI
N
News and Events Feed by Topic
C
Cybersecurity and Infrastructure Security Agency CISA
O
OpenAI News
T
The Exploit Database - CXSecurity.com
L
LINUX DO - 最新话题
T
Threat Research - Cisco Blogs
雷峰网
雷峰网
NISL@THU
NISL@THU
V
Visual Studio Blog

Все публикации подряд на Хабре

Ловим музу за клавиатуру: как айтишнику стать автором Что умеет Midjourney в 2026? Мой немного грустный разбор этого шикарного инструмента Никто не любит писать тесты, но ИИ может исправить это IPv8 выглядит как мечта. Поэтому почти наверняка не взлетит Производители вернули в продажу материнки с DDR3. Что происходит? Управление агентом с телефона через Telegram теперь в KodaCode От координации к лидерству: как меняется роль руководителя разработки Я сделала родителям бизнес вместо пенсии: зарабатываем 70 тысяч, мама не даёт продать В три раза быстрее приемка товара и оптимизация трудозатрат на 73%: как «РСТ-Инвент» помог Gulliver Group ИИ-шечный мир победил? О влиянии искусственного интеллекта на игропром Кремль снижает давление на Телеграмм пока Европа строит интернет по паспорту Как CEO, CTO и CIO за 8 часов собрали ИИ-директора, который умеет держать позицию под давлением Как (не) потерять домен за выходные Вместо 8 разных VPS: как я организовал практику студентам на одном сервере Почему твой Open Source проект не замечают? R&D: искусство управления неопределенностью в разработке AI-дефляция: вакансий для разработчиков больше, а рост зарплат — худший за 15 лет Мы отдали управление роботами OpenClaw. Что из этого вышло Галактический ID: система идентификации для всех форм разумной жизни Шесть основ бизнес-анализа: начинаем с вопроса «Кто в игре?» Код-ревью, в котором дело не в коде Данные переехали. Команда — нет Системной подход к сдаче OSWE в 2025 Почему комната управления реактором покрашена в цвет морской пены 4 YAML-файла вместо PySpark: как аналитикам строить пайплайны без разработчиков LLM-агент для поиска свободных доменов: автоматизируем подбор Когда, зачем и как правильно начинать новую сессию в Claude Code? Как я заставил нейросеть писать макросы для FreeCAD Анатомия ИИ‑агента для подбора персонала. От тысячи резюме к топ‑10 за минуты Опыт разработчика как экономика внимания Автономность как точка невозврата: кто будет субъектом в цифровом будущем Обучение ИИ в «диких» условиях: как рутинные действия превращаются в датасеты Как измерить LLM для задач кибербеза: обзор открытых бенчмарков Где хранить код? Сравнение GitHub, GitLab и Bitbucket Математика объясняет, почему нормальное распределение встречается повсюду Почему ваш FinOps не работает: 12 тезисов от практиков Как подписать проектную документацию УКЭП с использованием бесплатных лицензий Pilot Адаптивное администрирование Sigla Vision Я грузил уран в бочки, а потом 20 лет строил ИТ в атомной отрасли Чем позвонить с Эвереста? История и обзор спутниковой связи. Часть 2 Как языковая модель помогает контролировать качество инструктажей по охране труда в металлургии Как не передать на desktop свой IP в РКН Анатомия SAP Privileges: как устроено управление правами в macOS MoneyDev: Сказка про три главных слова Обновлённый токенизатор видео K-VAE 2.0 от Сбера Как сделать диспетчеризацию дома на 1284 квартиры почти бесплатно Как мы разогнали железную дорогу Мы дали агентам рутину. Теперь надо решить — что делать с освободившимся временем Токсичный контент, промпт-хакинг и защита ИИ — всё о Guardrails для LLM Умный город начинается с точного взгляда: как «Фалькон Тех» меняет пространство к лучшему Навайбкодил приложение для анализа графов Почему Дюну так интересно читать? Упрощаем работу с рутиной или как стать Гендальфом Белым Деконструкция Go: CPU, RAM и что там происходит. Go Assembler база. Часть 1.1 Какие профессии исчезнут из-за ИИ, а какие появятся? И что с этим делать Как мы построили IT-отдел, где хочется расти: архитектурные встречи, прозрачные метрики и книжные подарки Rufler: Делаем из Claude Code автономный рой через один YAML-конфиг Sing-box и белый список приложений Как построить надёжный обмен сообщениями в микросервисах: лучшие практики для enterprise OpenAI строит MLM-пирамиду, а McKinsey и Accenture помогают ей в этом Дом, который не построил Фишер (Часть 2) «Сверхзвуковой математик» против «Вдумчивого логиста»: битва алгоритмов 3D-упаковки Мультимодальные модели – грубый и дорогой инструмент Разговоры ничего не стоят. Код тоже Проверки физических лиц: с кого начнет ФНС Топ-10 бесплатных нейросетей для создания видео в 2026 году Первые слои кода: как наши решения сегодня определяют архитектуру ИИ на десятилетия Разработка нового статического анализатора: PVS-Studio JavaScript Поиск уязвимостей ПО: базовый минимум или роскошный максимум Почему оценка персонала не работает как инструмент управления Как мы разработали ИИ-ассистента и сократили рутину продуктовой команды на 50% Как я ушел из найма, нажарил косточек и продал на маркетплейсах на 168 млн в год Когда 1С:ERP уже внедрена, а нормального производственного плана всё ещё нет Как я сделал Claude мультимодальным, подключив к нему Qwen Omni Как приглашение на вакансию мечты превращается в атаку Infrastructure as Code: философия и лучшие практики IaC Тестируем Yandex Code Assistant на задаче, в которой нужно хранить секреты nxs-universal-chart v3.0: новое поколение универсального Helm-чарта Callback Injection: Техника, которая отправила Microsoft Defender в глухой нокаут «Все идеи на стол»: митап как способ вывести проект из тупика Сегодня я узнал нечто новое о GPU благодаря багу в своей игре Как заставить LLM ̶ ̶г̶а̶л̶л̶ю̶ ̶ эволюционировать Карта событий как фундамент аналитики: практический кейс для E-commerce Что выбрать для AI: x86, ARM или RISC-V? Дайджест железа за март Роль соматических мутаций в развитии аутоиммунных заболеваний: путь к избирательной терапии Mythos от Anthropic — тревожный сигнал для всех, а не только для банков Guardrails для LLM на Java: как приручить промпт‑инъекции и токсичные ответы Green-VLA: как мы собрали VLA-модель для реального антропоморфного робота и не потеряли обобщение Финансовая гонка вооружений: почему умные люди добровольно в ней участвуют Эра ИИ-агентов наступила: выбираем лучшего цифрового сотрудника # Практический опыт внедрения WinCC Redundancy на производственном предприятии Сделал MVP за 3 дня, а потом неделю прикручивал оплату. Оно того стоило? Физика против Маска: почему Starship V3 может оказаться ещё одной катастрофой Нефть Венесуэлы: крупнейшие запасы в мире, но не крупнейшая нефтяная держава JPA 4. Переосмысление Hibernate Почему зеркальная фотокамера Nikon D5 десятилетней давности идеально подошла для миссии «Артемида-2» Проект «Уровень-Спутник» или как мы сделали платформу для гидрологов «Замедлиться, чтобы ускориться»: почему ИИ повышает цену ошибок в требованиях и архитектуре Как с нуля поднять трафик IT-компании на 1657% при бюджете 55 тыс. и выжить Pixel-perfect Downsampling — идеальная отрисовка 50 миллионов точек без потерь
Визуализатор структуры адреса на Си для Linux и Termux: Попасть в «Голову» кеш-линии
DataViz · 2026-04-22 · via Все публикации подряд на Хабре

Уровень сложностиПростой

Время на прочтение3 мин

Охват и читатели2K

Туториал

В 47 мои увлечения стали Си, Radare2 , Биты, Логика, Память. Изучая память зацепился за адреса. На адрес 0x7ffe10b284 можно смотреть бесконечно долго. Трудно сказать с ходу насколько удачно ваши данные легли в память. Влезают они в одну кеш-линию или размазаны по двум. Чтоб не заниматься битовой арифметикой в уме, я написал утилиту на Си для Linux и Termux. Она раскладывает младшие 12 бит адреса на 4 строки визуализации. Теперь сразу видно, попали мы в "Голову" или застряли в "Хвосте" кеш-линии.

Утилита максимально легковесная. Вам не нужны сложные дебаггеры, достаточно gcc. Работает, как на десктопном Linux, так и в Termux на Android. Можно проверить выравнивание даже лёжа на диване.

Что такое "Голова" и "Хвост" кеш-линии

В современных процессорах (х86_64, ARM) память нарезана на блоки по 64 байта - это и есть кеш-линия. Процессор не умеет забирать из памяти один байт, он всегда тянет всю линию целиком.

Если ваша структура данных (например 16 интов) начинается в начале этой линии (адрес кратен размеру данных 64), она ложится в ее "Голове". Если же адрес смещен к концу блока (ближе к 63-му биты), данные попадают в хвост.

Почему это критично

Представьте вашу структуру массив на 16 интов (это как раз 64 байта размер кеш-линии). И вы не расположили так, что 8 интов лежат в конце одной кеш-линии в "Хвосте" , в остальные 8 в начале следующей.

  • РЕЗУЛЬТАТ: Процессору придётся выкачивать две линии вместо одной. Поход в память это дорого. Процессору в этом случае приходится ждать заряд, разряд конденсаторов.

  • ИТОГИ: Лишние такты, посадка производительности, не эффективное использование кеш L1.

АККУМУЛЯТОР: Каждая лишняя активная линия это мизерный но реальный ток. В масштабах миллионов операций в секунду это превращается в повышенный расход АКБ. Что особенно критично для мобильных устройств.

Код на Си

Я новичок мой код скорее всего кривой и косой. Я хочу визуализировать адрес памяти.

Логика простая: мы берём адрес переменной, разглаживает на биты и смотрим карту где мы находимся. Смещение страницы, кеш, номер набора и все остальное.

#include <stdio.h>
#include <stdint.h>
#define RAZR 12           //колличество разрядов выводим на печать
#define GEL "\033[1;33m"
#define RED "\033[1;31m"
#define GRIN "\033[1;32m"
#define ROZ "\033[1;35m"
#define SIN "\033[1;34m"
#define RES "\033[0m"
void hex_dec_nom_raz()
{
        printf("\n\n");
        int dec = 1; // строка десятичное представление двоичного числа dec
        for (int i = 0; i < RAZR; i ++)
        {
                printf(GRIN "%8d" RES , dec);
                dec = dec << 1;
        }
        printf("\n\n");

        for (int i = 0; i < RAZR; i ++) // строка для вычисления номера индекса номер набора
        {
                printf(ROZ "%8d" RES ,1 << (i % 6));
        }
        printf("\n\n");

        for (int j = 0; j < RAZR; j ++) // строка для номер разряда
        {
                printf(SIN  "%8d" RES , j);
        }
        printf("\n\n");
}

int bin_addr (uint64_t addr) //функция двоичного вида адреса
{
        int bin, offset_kech, mask = 63;

        for (int i = 0; i < RAZR; i ++)
        {
                bin = (addr >> i) & 1; // для цветного вывода единиц
                if (bin == 1)
                {
                        printf(RED "%8d" RES, bin);
                }
                else
                {
                        printf("%8d", bin);
                }
        }
        offset_kech = addr & mask; // смотрим смещение в КЭШ линии
        if ( offset_kech != 0 )
        {
                printf(GEL "\nРасстояние до головы КЕШ линии > %d < байт \n" RES, offset_kech);
        }
        else
        {
                printf(GEL "\nТы попал в голову\n" RES);
        }
        printf("\n");
        return 0;
}
int main ()
{
        uint64_t addr_mem;
        hex_dec_nom_raz ();
        while (1)
        {
                if (scanf("%li", &addr_mem) == 1)
                {
                        bin_addr (addr_mem);
                }
                else
                {
                        break;
                }
        }
        return 0;

Эксперимент

Сравним два адреса. Чтоб окончательно убедиться в пользе визуализатор, я сравниваю два случая.

Пишем две маленькие программы. В каждой программе массив, один случайный, другой выровненный по кеш-линии. И нам нужно вывести адреса нулевых элементов.

Массив со случайным адресом < vim mas_random.c>

Пишем код на Си

Пишем код на Си

Массив выровненный по кеш-линии <vim mas_alig.c>

Пишем код на Си

Пишем код на Си

gcc mas_alig.c -o mas_alig

  • gcc mas_random.c -o mas_random

  • Запуск

    • ./mas_alig

    • ./mas_random

    Выводим адреса массивов

    Выводим адреса массивов

    ./bin_analiz_addt

    • Утилита после запуска

      Утилита после запуска

      Адрес жёлтого цвета это выровненный массив по кеш-линии

    • Адрес красного цвета это адрес случайного массива

    ЗЕЛЁНАЯ ЛИНИЯ: Десятичное представление двоичного числа.

    • РОЗОВАЯ ЛИНИЯ: Номер набора.

    • СИНЯЯ ЛИНИЯ: Номер разряда.

    • БЕЛЫЕ ЛИНИИ: Двоичное представление адреса памяти.

    Первый адрес заканчивается на 0х80 это выровненный массив по кеш-линии. Единица в 7 разряде. Мы положили свои 16 интов в одну кеш-линию. ( Потом мы можем прочитать смещение страницы нам до "Головы" 128 байт. 4096 - 128 полученная цифра расстояние до "Хвоста" (до конца страницы). Номер набора 2 розовая линия с 6 по 11 разряды.

    Второй адрес заканчивается 0х7с это адрес случайного массива. Две кеш-линии не избежны. Мы находимся в средине страницы сложи 1024+512+256+64+32+16+8+4. Номер набора 1 +4+8+16.

    Здесь на самом деле много информации

    Техничка

    • Мы можем управлять разрядностью #define RAZ.

    • Вводить сколько угодно адресов.

    • DEC or HEX

    • Выход из программы любой символ я применяю стандарт " q ".

    • Можно выводить множество сообщений где ты находишься в кеш, на странице, можем расписать тэги.

    Ссылка на GitHub

    https://github.com/Data7Viz/addr_bit