C ++ делает выделение памяти стека памяти - PullRequest
0 голосов
/ 29 марта 2011

C ++ делает выделение памяти стека памяти / освобождение памяти дефрагментации. когда я объявляю переменные локальной памяти, они распределяются и освобождаются, это делает память раздробленной?

это может быть очень важно с точки зрения памяти

сколько памяти доступно для стека? можно выделить

 char sam[999999999999999];

Ответы [ 4 ]

3 голосов
/ 29 марта 2011

Нет, память не фрагментирована.Объем памяти, который вы можете выделить в стеке, определяется реализацией, обычно около 1 мегабайта.

2 голосов
/ 29 марта 2011

Размещение встроенных в стеке не должно приводить к фрагментации. Однако, если вы выделите что-то вроде string в стеке, а сам стек не будет фрагментирован, строка распределяет память в куче, которая может оказаться фрагментированной.

Как правило, размер стека очень мал по сравнению с кучей - примерно 1–64 МБ в зависимости от вашей платформы.

1 голос
/ 29 марта 2011

сколько памяти доступно для стека?

Это зависит.


Это зависит от компилятора и зависит отпараметры, с которыми вы запускаете свой двоичный файл (поскольку компиляторы могут решить отложить определение размера стека до времени выполнения).Это также зависит от операционной системы и доступных ресурсов.

Один интересный момент, gcc работает над SplitStacks .Некоторые языки уже предлагают это (например, Go), идея заключается в том, что стек может расти по требованию.На этом этапе предел становится следующим: сколько ОС может выделить за один раз?

Я еще не экспериментировал с этим ... даже не знаю, полностью ли это реализовано.

0 голосов
/ 29 марта 2011

Выполнение выделения и освобождения стековой памяти не будет зависеть от того, сколько памяти требуется для переменной стека, известно во время самой компиляции.Что касается максимального объема памяти, который вы можете выделить в стеке, зависит от компилятора.По умолчанию для компиляторов VS его 1 МБ, и его можно изменить через параметры компилятора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...