Можно ли выделять много памяти в стеке в однопоточных приложениях?

Я понимаю, что если у вас многопоточное приложение, и вам нужно выделить много памяти, то вы должны выделить в куче. Пространство стека делится между потоками вашего приложения, поэтому размер стека для каждого потока уменьшается по мере создания новых потоков. Таким образом, если вы попытаетесь выделить много памяти в стеке, он может переполниться. Но если предположить, что у вас однопоточное приложение, будет ли размер стека таким же, как у кучи?

Я где-то читал, что стек и куча не имеют четко определенной границы в адресном пространстве, а перерастают друг в друга.

P.S. Время жизни выделяемых объектов не является проблемой. Объекты создаются первым делом в программе и очищаются при выходе. Мне не нужно беспокоиться о том, что он выйдет за рамки и, таким образом, будет очищен от пространства стека.


person The Vivandiere    schedule 28.11.2015    source источник
comment
Все зависит от того, на какой системе вы работаете. Различные системы делают вещи по-разному. Было бы хорошо указать в своем вопросе, о какой системе вы спрашиваете.   -  person M.M    schedule 28.11.2015
comment
Попробуйте выделить 20 Мб в стеке и куче и посмотрите, что получится.   -  person Neil Kirk    schedule 28.11.2015
comment
@ M.M Я действительно работаю над проблемой кодирования. Итак, система неизвестна, я думаю.   -  person The Vivandiere    schedule 28.11.2015
comment
таким образом, размер стека для каждого потока становится меньше, когда вы создаете новый поток – гм, нет…?!   -  person The Paramagnetic Croissant    schedule 28.11.2015


Ответы (1)


Нет, размер стека не совпадает с кучей. Объекты стека помещаются/извлекаются методом LIFO и используются для таких вещей, как выполнение программы. Например, аргументы «заталкиваются» в стек перед вызовом функции, а затем «извлекаются» из аргументов функции, к которым осуществляется доступ. Поэтому рекурсия использует много места в стеке, если вы заходите слишком глубоко. Куча действительно предназначена для указателей и выделенной памяти. В реальном мире стек похож на шестеренки в ваших часах, а куча — на ваш стол. Ваши часы стоят на вашем столе, потому что они занимают место, но вы используете их для чего-то совершенно другого, чем ваш стол.

Проверьте этот вопрос на переполнении стека:

Почему память разделена на стек и кучу?'

person Dan Chase    schedule 28.11.2015