Когда вы вызываете malloc
или new
в компилируемую программу VC++ без написания собственного перенаправителя, вы попадаете в HeapAlloc
, то есть также knwon как NT Heap.
NT Heap разработан командой памяти Windows. Эти ребята отвечают за все управление памятью в ОС. Они распределяют виртуальное пространство для процессов пользовательского режима; они обрабатывают память для драйверов и т. д. Логично, что одна и та же команда предоставляет код для небольших распределений в коде приложения. По моему опыту, куча NT - это хорошо. У него нет серьезных недостатков. Когда у вас есть особые требования, другой распределитель может работать лучше. В общем случае NT куча является начальной точкой начала. Скорее всего, это удовлетворит ваши потребности.
Обратите внимание, что VC++ является компилятором. Он создает исполняемый файл, который запускается под операционной системой. Неверно говорить о какой-либо «среде выполнения VC++».
Тем не менее, я знаю, что сам компилятор не использует кучу NT при компиляции кода. Они используют свой собственный распределитель. Я не знаю точных причин, почему они это сделали.
Они внедрили свои собственные, используя функцию Windows [HeapAlloc] (http://msdn.microsoft.com/en-us/library/windows/desktop/aa366597%28v=vs.85%29.aspx). –
@BoPersson: строго говоря, это не совсем так ** их **. Они просто повторно использовали то, что ребята из Windows реализовали. – Fanael
Я не понимаю, почему бы им не принять некоторые существующие реализации, такие как Linux и unix? –