#%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B0_%D1%81_%D0%BF%D0%B0%D0%BC%D1%8F%D1%82%D1%8C%D1%8E

2025-08-17

MemorySanitizer (MSAN), когда он нужен и как внедрять

По разным оценкам, до 10% уязвимостей в коде на C и C++ являются следствием использования неинициализированной памяти (источники: 1 , 2 ). Задача MemorySanitizer (далее, MSAN) - выявлять использование неинициализированной памяти в коде, то есть мусора, например в блоке кода типа if (uninit_var) {...} . Кроме уязвимостей, неинициализированная память даёт о себе знать при портировании приложения на другую платформу, смене компилятора (или поднятии версии используемого), изменении уровня оптимизации или изменении кода таким образом, что то, что раньше "случайно" инициализировалось нулями, стало инициализироваться мусором. MSAN не является статическим анализатором, то есть для его работы требуется выполнение кода (нужны тесты/fuzzing/реальная нагрузка). Прежде чем переходить к самому MSAN, сначала разберемся почему недостаточно (или достаточно?) статического анализа, ведь даже компиляторы умеют предупреждать об использовании неинициализированных данных.

habr.com/ru/articles/937934/

#msan #работа_с_памятью #sanitizers #статический_анализ #aiagent

2025-05-27

[Перевод] Выравнивание AST (и других структур данных, используемых при работе с компилятором)

Два варианта абстрактного синтаксического дерева (AST) для выражения a * b + c. Арены, также называемые регионами, повсюду встречаются в современных языках программирования. Есть такая разновидность арен, которая одновременно супер-проста и удивительно эффективна при работе с компиляторами и тому подобными инструментами. Может быть, именно по причине такой простоты эта элементарная техника не попадалась мне во многих курсах по компиляторам — и вообще в теоретическом минимуме по информатике, если уж на то пошло. В этом посте я познакомлю вас с этой идеей, а также с её многочисленными достоинствами. Многие по-разному понимают, что такое арены или регионы , поэтому здесь я собираюсь называть интересующую меня разновидность этих структур данных « выровненной », а сам процесс — « выравниванием » (flattening). Выровненная арена содержит всего один тип, то есть, в сущности, это обычный массив. В таком массиве можно обойтись индексами, тогда как обычно для работы с массивом требуются указатели. Здесь мы поговорим, прежде всего, о выравнивании абстрактных синтаксических деревьев (AST), но вообще описанная идея применима с любой структурой данных, отягощённой указателями. Чтобы изучить выравнивание, мы дважды напишем простейший интерпретатор: сначала как обычно, а затем с применением выравнивания. Логика поста прослеживается по коду из этого репозитория , где можно сравнить две ветки . Здесь важнее всего отметить, что изменения минимальны, но при этом микробенчмарки показывают, что после выравнивания код работает в 2,4 раза быстрее. Благодаря выравниванию не только повышается производительность, но и сам код становится эргономичнее, на чём я также остановлюсь.

habr.com/ru/articles/913408/

#AST #работа_с_памятью #оптимизация

2025-03-07

Кастомные memory pools в Golang

Привет, Хабр! В этой статье рассмотрим, почему стандартный sync.Pool в Go не всегда спасает, когда речь идёт о высоконагруженных сервисах, и как кастомные memory pools позволяют взять под контроль работу с памятью.

habr.com/ru/companies/otus/art

#otus #memory_pools #работа_с_памятью #высоконагруженные_системы

2025-01-24

[Перевод] Операционная система в 1 000 строках кода (часть 2)

Продолжаем серию статей, посвящённую написанию собственной минималистичной ОС. В прошлой части мы познакомились со всеми вводными компонентами проекта и поставили общие цели. В этой же мы реализуем загрузку ядра, вывод строки Hello World!, механизм паники ядра, а также некоторые функции управления памятью и работы со строками. ▍ Навигация по вышедшим частям Часть 1 Часть 2 < — вы здесь.

habr.com/ru/companies/ruvds/ar

#ruvds_перевод #операционные_системы #разработка_ядра #linux #паника_ядра #работа_с_памятью #opensbi

2024-12-22

[Перевод] Миф о RAM

Миф о RAM — это верование о том, что память современного компьютера напоминает идеальную память с произвольным доступом. Кэш люди считают оптимизацией для малых данных: если они умещаются в L2, то будут обрабатываться быстрее; если нет, то тут уж ничего не поделаешь. Вероятнее всего, что самым быстрым разбиения данных будет такой код (я использую в качестве псевдокода Python; можете представить, что я пишу это на вашем любимом низкоуровневом языке): groups = [[] for _ in range(n_groups)] for element in elements: groups[element.group].append(element) Он и в самом деле линеен (то есть асимптотически оптимален), и мы всё равно должны выполнять доступ к произвольным индексам, так что кэш здесь нам ни в чём бы не помог. В реальности, когда количество групп высоко, такой код не задействует большую часть производительности, а некоторые асимптотически более медленные алгоритмы могут выполнять сегментирование гораздо быстрее. В основном они применяются в базах данных на диске, но, как ни странно, полезны даже в случае данных в RAM.

habr.com/ru/articles/868452/

#кэш #работа_с_памятью #оптимизация_кода #озу #оперативная_память

2024-11-27

[Перевод] Создаём простой копирующий сборщик мусора

Этот пост станет итерацией туториала и знакомством с реализацией сборки мусора, описанной в классической статье . Мы продолжим работать с простыми сборщиками мусора, но на этот раз немного повысим сложность. Я подумал, что это будет здорово, ведь в коде из статьи уже имелся крошечный, но функциональный мутатор, а набор тестов был призван это подчеркнуть; это значит, что мы можем сравнивать производительность и реализацию копирующего сборщика и обычного сборщика.

habr.com/ru/companies/ruvds/ar

#сборка_мусора #сборщики_мусора #копирующий_сборщик #работа_с_памятью #ruvds_переводы

2024-08-07

[Перевод] Как я портировал свой игровой движок с JavaScript на C

high_impact tl;dr: high_impact — это маленький игровой движок для 2D-игр жанра «экшн». Он написан на C, компилируется для Windows, Mac и Linux, а также для WASM в вебе. Он был написан «по мотивам» моего игрового движка Impact на JavaScript, разработанный в 2010 году. Название high_impact — отсылка к тем временам, когда C считался языком высокого уровня. Движок имеет лицензию MIT, исходники выложены на Github: github.com/phoboslab/high_impact Видео из моего твита за 5 июля , демонстрирующее геймплей Biolab Disaster

habr.com/ru/companies/ruvds/ar

#ruvds_переводы #impact #игровые_движки #работа_с_памятью #кроссплатформенная_разработка #физический_движок

2024-07-24

Прошиваем программу не только в начало FLASH памяти STM32

Знаете ли вы куда попадает ваша программа после того, как вы нажали кнопку RUN или DEBUG в IDE? Если да, то как изменить этот адрес или даже выйти за пределы постоянной памяти и прожигаться сразу в оперативную память? Небольшая статья, которую я сам в свое время не нашел и потратил много часов и нервов на сбор этой не хитрой информации.

habr.com/ru/articles/831016/

#stm32 #микроконтроллеры #flashпамять #ram #прошивка_контроллера #программирование_микроконтроллеров #работа_с_памятью #bootloader #загрузчик

2024-03-19

[Перевод] Выявление ошибок в работе с памятью в C и C++: Сравниваем Sanitizers и Valgrind

В этой статье вашему вниманию представлено сравнение двух инструментов для поиска ошибок в работе с памятью в программах, написанных на memory-unsafe (небезопасных при работе с памятью) языках — Sanitizers и Valgrind . Эти два инструмента работают совершенно по-разному. Поэтому, хоть Sanitizers (разработанный инженерами Google) имеет ряд преимуществ перед Valgrind, у каждого из них есть свои сильные и слабые стороны. Следует сразу отметить, что проект Sanitizers имеет название во множественном числе, потому что он состоит из нескольких инструментов, которые мы рассмотрим в этой статье в совокупности.

habr.com/ru/companies/otus/art

#работа_с_памятью #Sanitizers #Valgrind #динамические_структуры_данных

2024-03-17

Правило трех и пяти в C++: что это такое и зачем они нужны?

Привет, Хабр! Сегодня я хочу поговорить о двух правилах С++: правиле трех и правиле пяти . Правильное понимание этих правил способно уберечь код от утечек и неопределенных поведений.

habr.com/ru/companies/otus/art

#c++ #правила_пяти #работа_с_памятью #правило_трех

Client Info

Server: https://mastodon.social
Version: 2025.07
Repository: https://github.com/cyevgeniy/lmst