2013-11-18 3 views
1

В этом вопросе есть несколько частей.Размер блоков кучи, объема и памяти

Согласно большинству ресурсов, доступных в сети, и в соответствии с учебниками также, куча и стек памяти растут в противоположных направлениях.

  1. Do Heap и Stack фактически всегда растут в противоположных направлениях по отношению друг к другу, особенно когда дополнительная память выделяется ОС для памяти Heap?

  2. Учтите, что изначально в программе используются только распределения кучи и минимальная память стека. Следовательно, куча будет покрывать почти всю совокупную память, выделенную для Stack и heap. Впоследствии Stack начинает расти. Будет ли выбрана ошибка или будет выделено новое место памяти для того, чтобы стек увеличился до максимального предела (максимальный предел = предел, указанный командой «ulimit -s»)? Если можно назначить новое местоположение, не нарушает ли это условие, что в адресах Stack всегда назначаются по порядку?

  3. Предусмотрено ли заранее определенное ограничение на использование памяти инициализированными и неинициализированными переменными, хранящимися в разделе данных?

+2

На них может быть дан ответ только для конкретной операционной системы и архитектуры процессора. ОС и аппаратное обеспечение полностью определяют политику управления памятью. – Gene

+1

http://stackoverflow.com/questions/2067126/program-stack-and-heap-how-do-they-work – stellarossa

ответ

1

Ответы:

Do Heap and Stack actually always grow in opposite directions towards each other, 
especially when extra memory is allocated by the OS for Heap memory? 

кучи и стека деталь реализации и не требует спецификация языка. Направления, которые они растут, не обязательно друг к другу; они могут расти в любом случае, они хотят.

Consider that initially in the program, 
only heap allocations take place and minimal Stack memory is used. 
Hence, Heap will cover almost entire combined memory allocated 
for Stack and heap. Afterwards, Stack starts to grow. 
Will an error be thrown or will new memory location be allotted 
for Stack to grow to its maximum limit 
(maximum limit = limit shown by "ulimit -s" command)? 
If new location can be allotted, then doesn't it violate the condition 
that in Stack addresses are always assigned in order? 

Если ваша куча и стопка растут друг к другу, может произойти переписывание. Вы получите только уведомление об откате, если ваш распределитель памяти проверяет наличие свободного места или у вас есть утилита, которая проверяет распределение стека во время выполнения. Помните, что не все платформы - это Linux или Windows-ПК; многие из них являются ограниченными встроенными системами.

Is there any pre-defined limit on the memory usage 
by initialized and uninitialized variables 
stored in Data section? 

Да, для переменных должна быть память. Переменные могут быть выгружены на внешнее устройство ОС. Существует вероятность того, что переменные не являются переменными, а аппаратными регистрами. Опять же, это все зависит от платформы. Правило, налагаемое языковым стандартом, состоит в том, что переменные должны быть адресуемыми, а статические или автоматические переменные должны иметь уникальный адрес (правило определения, ODR).

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

  • Нет связанных вопросов^_^