home.social

#malloc — Public Fediverse posts

Live and recent posts from across the Fediverse tagged #malloc, aggregated by home.social.

fetched live
  1. 🎉 Oh, the classic tale of the programmer who thought they were in control of memory allocation! 😂 Spoiler alert: #malloc heard you wanted 13 bytes and delivered a buffet 🍽️ of internal fragmentation instead. Next time, ask for a byte-sized miracle and receive a banquet of bytes you never ordered. 🍕💾
    ssenthilnathan3.github.io/blog #programminghumor #memorymanagement #internalfragmentation #codingjokes #HackerNews #ngated

  2. Аллокатор в Go

    Привет, Хабр! Текущая статья будет полезна тем, кто уже знаком с основами языка программирования Golang и хочет более углублённо изучить его. Исходя из названия стати понятно, что речь пойдёт об аллокаторах, основных видах, плюсах и минусах, а также о том, какой аллокатор используется в Go. Я настоятельно рекомендую прочитать статью целиком, прежде, чем приступать к чтению части конкретно относящейся к аллокатору Go.

    habr.com/ru/articles/1058856/

    #go #golang #allocation #alloc #allocator #storage #mall #malloc

  3. [Перевод] Структуры данных на практике. Глава 17: Структуры данных загрузчиков

    Наш загрузчик оказался слишком медленным. Требование было чётким: загружаться менее чем за 500 миллисекунд. Показатели оставались не менее чёткими: 720 миллисекунд. Мы отставали от нужного значения на 44%. Это требование не было «мягким». Загрузчик должен был работать в промышленном контроллере, обязанном реагировать вскоре после включения питания. Каждая секунда времени загрузки — это потерянная продуктивность. В спецификации к изделию был указан максимум в 500 мс. Мы обязаны были их обеспечить. Задача загрузчика была простой: 1. Инициализировать оборудование (UART, SPI, DDR-контроллер) 2. Загрузить ядро из флэш-памяти 3. Спарсить дерево устройств 4. Перейти ко точке входа ядра Реализация казалась логичной: стандартные структуры данных из библиотеки C. Проблема выявилась при профилировании: 45% времени загрузки тратилось на malloc/free! В загрузчике всего с 64 КБ ОЗУ динамическое распределение роняло производительность.

    habr.com/ru/articles/1049964/

    #микроконтроллеры #загрузчик #bump_allocator #malloc

  4. OSDEV: Разработка аллокатора на С++ часть 5. osdev-libstdc

    Приветствую! Это обзорная статья на этот раз совсем простая. Используется уже написанный аллокатор . Я лишь ставлю в известность читателей о существовании в osdev-libstdc вполне стандартных функций aligned_alloc, malloc, calloc, realloc и free. Их реализация примитивна:

    habr.com/ru/articles/1052784/

    #osdev #malloc #realloc #free #аллокатор #спинлок

  5. OSDEV: Разработка аллокатора на С++ часть 4. mem_malloc_aligned

    Приветствую читатель! Для тех кто со мной впервые вот оглавление: Часть 1 Часть 2 Часть 3 Код лежит тут Подразумевается что читатель знаком с архитектурой аллокатора из части 3 и понимает алгоритм неявного списка свободных блоков который был освещен в части 1 Аллокатор работает стабильно, все тесты зеленые, включая тесты на стабильность. И следующим шагом логично бы реализовать перегрузки new и delete для abi, но вот незадача: там есть версии принимающие дополнительный аргумент, а именно выравнивание. Эту фичу я реализовать как раз забыл. В архитектуре которая рассматривается в предыдущей статье это оказалось простой, но интересной задачей. Ее мы и обсудим ниже. Решение потребовало реализации функции mem_malloc_aligned которая выделит бОльший кусок памяти с учетом запрошенного выравнивания что бы мы там точно нашли правильно выровненный адрес. Но что если адрес указателя из mem_malloc_aligned не совпадает с адресом указателя который вернул mem_malloc? Что делать в mem_free? Что делать в mem_realloc? Как мне работать с указателем перед которым не хедера? Для начала я решил применить технику добавления смещения перед payload выровненного блока вместо хедера, смещения до payload изначального блока у которого есть хедер и футер. Но как мне отличить offset от header? Я решил добавить magic number в хедер и футер увеличив тем самым размер оверхеда в 2 раза и раз уж от него считалось внутреннее выравнивание блоков памяти в аллокаторе и минимальный размер блока, то теперь минимальный размер блока стал 32 байта, а с оверхедом все 64. Теперь можно просто проверять magic number и если он не совпадает, то интерпретировать число на месте хедера как смещение до payload блока который вернул mem_malloc и далее получив на него указатель работать с блоком стандартным образом.

    habr.com/ru/articles/1047178/

    #аллокатор #распределение_памяти #malloc #free #realloc

  6. OSDEV: Разработка аллокатора на С++ часть 3. Финальный аллокатор со списками свободных блоков

    В третьей статье пойдет речь уже о готовом аллокаторе который вполне пригоден для распределения памяти

    habr.com/ru/articles/1045692/

    #аллокатор #allocator #malloc #free #распределение_памяти #osdev #менеджмент_памяти #memory_management

  7. and being able to return NULL when given a size of 0 is a discontinuity in design, and a mistake, IMO.

  8. [Перевод] Почему первый вызов моей malloc всегда аллоцирует 72 КБ?

    Мне нравится экспериментировать с кастомными аллокаторами памяти, используя собственные реализации. И хотя модульные тесты помогают убедиться в их корректности, настоящей проверкой становится работа аллокатора в реальных программах. Коротко о теме статьи. Стандартная библиотека C++ инициализирует механизм обработки исключений на раннем этапе, выделяя память для «резервного пула», чтобы можно было использовать её под выброс исключений, если malloc вдруг провалится.

    habr.com/ru/companies/ruvds/ar

    #ruvds_перевод #программирование #c++ #с #linux #malloc #аллокация_памяти

  9. 🚨 Oh no, another "expert" tries to unravel the enigma of the mystical 72 KB #C++ #malloc allocation and ends up drowning in a sea of jargon. 🌊 Instead of solving the "mystery", we're treated to a riveting tale of exception handling and a memory pool that could rival the Bermuda Triangle's complexity. 🙄 Spoiler alert: it's just C++ being C++.
    joelsiks.com/posts/cpp-emergen #expert #analysis #memorypool #exceptionhandling #HackerNews #ngated

  10. Кастомные аллокаторы для игровых движков: arena, pool и slab на C++

    Стандартный malloc — универсальный инструмент, но в геймдеве универсальность часто означает «недостаточно быстро». Когда бюджет кадра 16 мс, а каждый кадр рождаются тысячи объектов, имеет смысл разобраться в специализированных аллокаторах. Рассмотрим три основных типа: arena, pool и slab — когда какой использовать, как реализовать, и какие подводные камни ждут. Смотреть реализацию

    habr.com/ru/companies/otus/art

    #C++ #кастомные_аллокаторы #управление_памятью #malloc #фрагментация_памяти #локальность_кэша #многопоточность

  11. 2/3

    El valor de #swappines permite al sistema gestionar la memoria.

    Podemos consultar su valor usando:

    $ sysctl vm.swappiness

    Y podemos cambiarlo modificando su valor editando el archivo /etc/sysctl.conf (si les interesa me avisan y luego puedo ampliar detalles de cómo se hace).

    Otra opción interesante de la encuesta es "vm.overcommit_memory". Brevemente, controla la política del núcleo del sistema para asignar memoria virtual cuando los procesos solicitan bloques dinámicamente (#malloc).