home.social

#распределение_памяти — Public Fediverse posts

Live and recent posts from across the Fediverse tagged #распределение_памяти, aggregated by home.social.

fetched live
  1. 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

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

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

    habr.com/ru/articles/1045692/

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

  3. OSDEV: Разработка аллокатора на С++ часть 2: Слияние блоков за константное время. Юнит тест для аллокатора

    Приветствую, уважаемый читатель! В первой части мы реализовали простейший аллокатор с минимальным оверхедом. Конечно же на самом деле все сложнее. Так реализация дефрагментации была наивной и не могла сливать блоки даже когда не было распределенных блоков после нескольких вызовов mem_free. Для того, что бы получить исходную картинку где будет только 2 служебных блока и один свободный нужно было бы вызвать mem_alloc с размером большим чем доступно памяти что бы искусственно запустить дефрагментацию. В этой части мы это исправим и напишем юнит тест для нашего аллокатора что бы убедится что он работает правильно.

    habr.com/ru/articles/861930/

    #распределение_памяти #allocator #memory_allocation #memory_management

  4. [Перевод] Распределение памяти. Клетки, не относящиеся к мозгу, участвуют в формировании воспоминаний

    Фраза «чую той частью, где спина зовется иначе» начинает играть новыми красками. Фактически, речь идет о том, что наша память может формироваться вне мозга. Специфическая подача химического сигнала вместе с определенным генетическим паттерном перепрофилирует определенные клетки нашего тела.

    habr.com/ru/articles/859138/

    #распределение_памяти #обучение #мозг #нейроны #нейронные_связи #память #научпоп

Share on Mastodon

Enter the server where you have an account.