2012-05-12 6 views
3

В настоящее время я изучаю реализацию malloc для своей домашней работы.Реализация Visual-C++ malloc?

Я знаю, что существуют некоторые версии реализации malloc, такие как ptmalloc, используемые glibc, и jemalloc, используемые FreeBSD.

Интересно, какая версия реализации принята на Visual C++? Или команда vC++ только что реализовала свою собственную версию?

+5

Они внедрили свои собственные, используя функцию Windows [HeapAlloc] (http://msdn.microsoft.com/en-us/library/windows/desktop/aa366597%28v=vs.85%29.aspx). –

+1

@BoPersson: строго говоря, это не совсем так ** их **. Они просто повторно использовали то, что ребята из Windows реализовали. – Fanael

+0

Я не понимаю, почему бы им не принять некоторые существующие реализации, такие как Linux и unix? –

ответ

5

Когда вы вызываете malloc или new в компилируемую программу VC++ без написания собственного перенаправителя, вы попадаете в HeapAlloc, то есть также knwon как NT Heap.

NT Heap разработан командой памяти Windows. Эти ребята отвечают за все управление памятью в ОС. Они распределяют виртуальное пространство для процессов пользовательского режима; они обрабатывают память для драйверов и т. д. Логично, что одна и та же команда предоставляет код для небольших распределений в коде приложения. По моему опыту, куча NT - это хорошо. У него нет серьезных недостатков. Когда у вас есть особые требования, другой распределитель может работать лучше. В общем случае NT куча является начальной точкой начала. Скорее всего, это удовлетворит ваши потребности.

Обратите внимание, что VC++ является компилятором. Он создает исполняемый файл, который запускается под операционной системой. Неверно говорить о какой-либо «среде выполнения VC++».

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

+0

Прекрасное описание. См. Также http://stackoverflow.com/a/6494048/16673 – Suma

Смежные вопросы