Читая это, это на самом деле за рамки сферы C. C не определяет, что есть куча за malloc
; его можно так же легко назвать связанным списком ; вы просто называете это кучей по соглашению.
Какие стандартные гарантии, что malloc
либо возвращает указатель на объект, который имеет динамическую длительность хранения, и ваша куча только один тип структуры данных, которая облегчает предоставление такого срока хранения. Это общий выбор. Тем не менее, сами разработчики, которые написали свою кучу признали, что это не может быть кучей, и поэтому вы не увидите никаких ссылок термина кучного в the POSIX malloc
manual, например.
Другие вещи, выходящие за рамки стандарта C, включают такие детали машинного кода двоичный код, который больше не является исходным кодом C после компиляции. Детали макета, хотя и типичны, являются специфичными для реализации, в отличие от C-specific.
кучи, или в зависимости от того книга по поддержанию структуры данных используется для учета распределений, генерируется во время выполнения; как вызывается malloc
, новые записи (предположительно) добавляются к нему и, как вызывается free
, новые записи (опять же, предположительно) удаляются из него.
В результате, как правило, нет необходимости иметь раздел в двоичном коде машинного кода для объектов, выделенных с использованием malloc
, однако есть случаи, когда приложения отправляются автономно, запеченные в микропроцессоры, и в некоторых из этих случаев вы можете обнаружить, что вспышка или в противном случае энергонезависимая память может быть зарезервирована для этого использования.
Кто-нибудь? Мне просто интересно узнать, какую ценность извлечь из этого, потому что это похоже на совершенно недействительный ответ. Возможно, вы можете уточнить ... вы говорите, что 1/когда какая-то память используется программой, она находится в куче? Или вы говорите 2 /, как только программа закончится с памятью, она попадает в кучу? Любой из них * неверен *. Включает ли это память регистров и память на вращающемся жестком диске? – Sebivor
Кроме того, это пример очень плохого ресурса для обучения C. Если вам нужно руководство для ссылки, это [руководство POSIX 'malloc'] (http://pubs.opengroup.org/onlinepubs/9699919799/functions /malloc.html), который вы заметите, не ссылается на термин * heap *, так как люди, которые написали вашу * кучу *, понимают (как и должны), что это не обязательно * heap *; это * книжное пространство *. – Sebivor
@Sebivor - память, которая не используется приложением, - это то, что я называл кучей. Таким образом, у вас есть все распределения, которые являются частью запуска приложения, а память, доступная для malloc, - это куча. –