Цитата(ViKo @ Feb 22 2011, 18:12)

Я только предположил, что для инициализации используется стек.
А что, если самой malloc() требуется стек?
Неверное предположение. Извините.
Самой функции malloc() для работы наверняка требуется стек. Хотя я не смотрел на ее исходные коды, и поэтому могу ошибиться. Но это не важно -- нужен ей стек для ее переменных или нет. Важно, что когда функция возвращает управление, ее стековый кадр перестает существовать. А значит, что нас совершенно не касается, что там она у себя внутри делает (если она все делает согласно своему описанию). Не думайте, что выделение и освобождение памяти -- это что-то сверхъестественное. Там все достаточно просто и особого изврата нет. Изврат начинается на стороне программиста, когда тот пытается записать по адресу, память которого уже отдана в общий пул памяти (возвращена в кучу), или когда программист забывает вернуть эту память. Один раз не пид... можно. Но если прога в цикле забирает память и не возвращает? В конце концов прога когда-нибудь да исчерпает всю память. (Мне в этом отношении нравится Линуксовый подход. -- Пестня! Попробуйте сотряпать прогу, которая постепенно сжирает память и посмотрите на реакцию системы. Уверяю -- получите удовольствие! Хотя... извините, Остапа опять пенесло!)
Цитата(sonycman @ Feb 22 2011, 21:41)

Не думаю, что область памяти, выделяемая с помощью malloc() из кучи, хоть как то инициализируется.
Это уже забота программиста.
Задача malloc() - просто предоставить блок свободной памяти.
Вот именно -- не инициализируется! И это единственное правильное решение. Зачем память инициализировать? Чем ее инициализировать? Нулем? 0xFF-ами? Чем??? -- Ну откуда malloc() знает, что там собирается делать программер. А поскольку любая инициализация так или иначе потребует процессорного времени, то зачем его трать, если нам нужна не такая, а какая-то другая инициализация? Вот поэтому malloc() только выделяет кусок памяти и более ничего не делает. Ну разве что перед тем как это сделать, она проверяет а вообще сможет-ли она выделить непрерывный кусок памяти запрошенного размера. Если сможет, то помечает его границы (записывает особые отметки в пограничные участки) и возвращает пользователю начальный адрес куска.
Но если вы по каким-либо причинам произведете запись сразу же за последним байтом выделенного участка, то вы сломаете структуру. Возможно, вы сможете еще писать-читать из выделенных участков памяти, но уже нормально воспользоваться механизмом выделения и возвращения (malloc-free) -- нет!
Хех. Меняю свой опыт на вашу молодость.