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 и далее получив на него указатель работать с блоком стандартным образом.

https://habr.com/ru/articles/1047178/

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

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

Приветствую читатель! Для тех кто со мной впервые вот оглавление: Часть 1 Часть 2 Часть 3 Код лежит тут Подразумевается что читатель знаком с архитектурой аллокатора из части 3 и понимает алгоритм...

Хабр

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

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

https://habr.com/ru/articles/1045692/

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

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

Оглавление Часть 1 Часть 2 Весь код можно найти в этом репозитории В третьей статье пойдет речь уже о готовом аллокаторе который вполне пригоден для распределения памяти. Он полностью переписан, но...

Хабр

Episode 33 ist raus!

Kind: 2, Smart Home: 0

https://share.transistor.fm/s/7a35c088

#homeassistant #linux #kde #childproofing #memorymanagement #malloc #matter #ikea

Viel Spaß beim Hören wünschen euch:
@ajfriesen und @behweh

SmartHütte | Kind: 2, Smart Home: 0

Diese Woche im Fokus:Andrejs Tochter eröffnet bei uns das neue Format "Kind vs Smart Home", und es hat den Anschein, als könnte sich das zu einem regelmäßigen Format entwickeln. ;-) Ausserdem berichtet Andrej darüber, was sich auf seinem Desktop Linux so getan hat und weist schon mal darauf hin,...

In the past weeks, the pwn.college Dynamic Allocator Misuse module taught me many practical concepts I have long known from theory:

Use-after-free, double-free, tcache internals, LIFO reuse, tcache poisoning, arbitrary read, fake chunks, safe-linking, whitespace-armored addresses, and partial secret corruption.

Knowing theory is good, but experiencing those concepts in practice is priceless.
Thank you, @pwn.college!

#ctf #cybersecurity #pwncollege #malloc #heap #tcache #safelinking

Finished the pwn.college Yellow belt Dynamic Allocator Misuse - 4 weeks of type-2 fun.

Onward to greatness and my Yellow belt in pwn.college!

#ctf #cybersecurity #pwncollege #malloc #heap #tcache #safelinking

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

#programming #C #libc

Meta 的 jemalloc 宣言

在 Lobsters 上看到「Investing in Infrastructure: Meta’s Renewed Commitment to jemalloc」這篇,這讓我馬上想到 Jason Evans (就是發明 jemalloc 的人,je 取自他的名字縮寫) 在去年寫的「jemalloc Postmortem」這篇,文章最後提到 Meta 的制度設計使得不會...

Gea-Suan Lin's BLOG

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

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

https://habr.com/ru/companies/ruvds/articles/1006290/

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

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

Мне нравится экспериментировать с кастомными аллокаторами памяти, используя собственные реализации. И хотя модульные тесты помогают убедиться в их корректности, настоящей проверкой становится работа...

Хабр
🚨 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++.
https://joelsiks.com/posts/cpp-emergency-pool-72kb-allocation/ #expert #analysis #memorypool #exceptionhandling #HackerNews #ngated
Why is my first C++ (m)allocation always 72 KB?

Why is my first C++ (m)allocation always 72 KB?? It’s the ’emergency pool’ for exceptions, here’s how I uncovered it using GDB and digging through the source code of libstdc++, glibc and Valgrind!