Как malloc и свободны реализованный?

Я хочу реализовать свою собственную систему управления динамической памятью для добавления новых опций, которые помогают управлять памятью в C++.

Я использую Windows (XP) и Linux (Ubuntu). Что необходимо для реализации функций как 'malloc' и 'свободный'? Я думаю, что должен использовать самые низкие системные вызовы уровня.

Для Windows я нашел функции: GetProcessHeap, HeapAlloc, HeapCreate, HeapDestroy и HeapFree.

Для Linux я не нашел системных вызовов управления "кучей". На Linux, malloc и свободный системные вызовы, не так ли?

Спасибо

Править:
C++ не предоставляет сборщик "мусора", и сборщик "мусора" является медленным. Некоторые выделения легки к свободному, но существуют выделения, которому нужен сборщик "мусора".

Я хочу реализовать эти функции и добавить новые опции:
* Каждый раз, когда свободный () быть названными, проверьте, принадлежит ли указатель "куче".
* Справка со сборкой "мусора". Я должен хранить некоторую информацию о выделенном блоке.
* Использование несколько "кучи" (HeapCreate/HeapDestroy в Windows). Я могу удалить всю "кучу" с ее выделенными блоками быстро.

12
задан Benjamin 17 February 2014 в 12:53
поделиться

5 ответов

В linux malloc и free не являются системными вызовами. malloc/free получает память от ядра, расширяя и сжимая (если может) сегмент данных с помощью системных вызовов brk, а также получая анонимную память с помощью mmap - и malloc управляет памятью в этих регионах. Некоторую базовую информацию и множество отличных ссылок можно найти здесь

15
ответ дан 2 December 2019 в 05:39
поделиться

В * nix функция malloc () реализована на уровне библиотеки C. Он использует brk () / sbrk () для увеличения / сжатия сегмента данных и mmap / munmap для запроса / освобождения сопоставлений памяти. См. на этой странице описание реализации malloc, используемой в glibc и uClibc.

5
ответ дан 2 December 2019 в 05:39
поделиться

Сборщик мусора работает медленно

Это совершенно бессмысленное утверждение. Во многих практических ситуациях программы могут значительно повысить производительность с помощью сборщика мусора, особенно в многопоточных сценариях. Во многих других ситуациях сборщики мусора снижают производительность.

0
ответ дан 2 December 2019 в 05:39
поделиться

Если вы просто оборачиваете системные вызовы, то вы, вероятно, ничего не выигрываете по сравнению с использованием стандартного malloc - это все, что они делают.

Более распространенным является использование malloc (или HeapAlloc() и т.д.) одного блока памяти в начале программы и управление распределением в нем самостоятельно. Это может быть более эффективным, если вы знаете, что будете регулярно создавать/отнимать много маленьких блоков памяти.

4
ответ дан 2 December 2019 в 05:39
поделиться

brk - это системный вызов, используемый в Linux для реализации malloc и free . Для получения информации обратитесь к странице руководства.

У вас уже есть Windows.

Увидев здесь другие ответы, я хотел бы отметить, что вы, вероятно, изобретаете велосипед заново; уже существует множество хороших реализаций malloc . Но программирование malloc - хорошее упражнение для размышлений - посмотрите здесь , чтобы найти хорошее домашнее задание (первоначально код CMU), реализующее то же самое. Однако их оболочка дает вам немного больше, чем на самом деле ОС Linux :-).

3
ответ дан 2 December 2019 в 05:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: