Добре ли е да се разпределя много памет в стека в еднонишкови приложения?

Разбирам, че ако имате многонишково приложение и трябва да разпределите много памет, тогава трябва да разпределите на купчина. Стековото пространство е разделено между нишките на вашето приложение, като по този начин размерът на стека за всяка нишка става по-малък, когато създавате нови нишки. По този начин, ако се опитате да разпределите много памет на стека, тя може да препълни. Но ако приемем, че имате приложение с една нишка, размерът на стека по същество същият ли е като този за купчината?

Четох другаде, че стекът и купчината нямат ясно дефинирана граница в адресното пространство, а по-скоро прерастват един в друг.

P.S. Животът на разпределените обекти не е проблем. Обектите се създават първо в програмата и се почистват при излизане. Не трябва да се притеснявам, че ще излезе извън обхвата и по този начин ще се изчисти от стековото пространство.


person The Vivandiere    schedule 28.11.2015    source източник
comment
Всичко зависи от това на коя система работите. Различните системи правят нещата по различен начин. Би било добре да посочите във въпроса си за коя система питате.   -  person M.M    schedule 28.11.2015
comment
Опитайте да разпределите 20mb върху стека и купчината и вижте какво ще се случи.   -  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 начин и се използват за неща като програмен поток. Например, аргументите се „вкарват“ в стека преди извикване на функция, след което се „вкарват“ в аргументите на функцията за достъп. Следователно рекурсията използва много пространство в стека, ако отидете твърде дълбоко. Heap наистина е за указатели и разпределена памет. В реалния свят стекът е като зъбните колела във вашия часовник, а купчината е като вашето бюро. Вашият часовник стои на бюрото ви, защото заема място - но вие го използвате за нещо съвсем различно от вашето бюро.

Вижте този въпрос в Stack Overflow:

Защо паметта е разделена на стек и куп?"

person Dan Chase    schedule 28.11.2015