home.social

#работа_с_памятью — Public Fediverse posts

Live and recent posts from across the Fediverse tagged #работа_с_памятью, aggregated by home.social.

  1. Почему в C++/Qt нельзя просто взять и забыть про сырые указатели

    Современный C++ (11/14/17/20…) настойчиво учит нас: «Забудьте про new и delete , используйте умные указатели». Это отличный совет для чистого C++, но как только вы открываете документацию Qt, на вас снова прыгают T* . Почему даже в 2026 году невозможно написать серьезное приложение на Qt, используя исключительно умные указатели? Давайте разберемся, где «умный» код ломает логику фреймворка.

    habr.com/ru/articles/1026346/

    #Qt #умные_указатели #работа_с_памятью

  2. Оптимизация обработки больших отчетов в .NET Core: от памяти к потокам

    Оптимизация обработки больших отчетов в .NET Core: от памяти к потокам Отчёты росли, память заканчивалась. Пришлось отказаться от словарей в пользу потоковой сериализации JSON. Делюсь, как реализовал запись отчёта «на лету» и заставил.NET работать с гигабайтами данных без OutOfMemory.

    habr.com/ru/articles/967432/

    #NET #c# #сериализация #streaming #оптимизация #производительность #архитектура #xbrl #работа_с_памятью #json

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

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

    habr.com/ru/companies/otus/art

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

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

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

    habr.com/ru/companies/otus/art

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

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

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

    habr.com/ru/companies/otus/art

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

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

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

    habr.com/ru/companies/otus/art

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

  7. [Перевод] Миф о 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/

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

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

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

    habr.com/ru/articles/937934/

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

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

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

    habr.com/ru/articles/913408/

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

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

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

    habr.com/ru/companies/ruvds/ar

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

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

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

    habr.com/ru/companies/ruvds/ar

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

  12. [Перевод] Как я портировал свой игровой движок с 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 #игровые_движки #работа_с_памятью #кроссплатформенная_разработка #физический_движок

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

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

    habr.com/ru/articles/831016/

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

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

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

    habr.com/ru/companies/otus/art

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

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

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

    habr.com/ru/companies/otus/art

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

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

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

    habr.com/ru/articles/937934/

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

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

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

    habr.com/ru/articles/937934/

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

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

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

    habr.com/ru/articles/937934/

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