Это просто размер по умолчанию. Если вам нужно больше, вы можете получить больше - чаще всего, указав компоновщику выделить дополнительное пространство стека.
Обратной стороной больших стеков является то, что если вы создаете много потоков, для каждого из них потребуется по одному стеку. Если все стеки выделяют несколько МБ, но не используют их, пространство будет потрачено впустую.
Вы должны найти правильный баланс для своей программы.
Некоторые люди, например @BJovke, считают, что виртуальная память по сути бесплатна. Это правда, что вам не обязательно иметь физическую память, поддерживающую всю виртуальную память. Вы должны уметь хотя бы выдавать адреса виртуальной памяти.
Однако на типичном 32-битном ПК размер виртуальной памяти такой же, как и размер физической памяти, потому что у нас есть только 32 бита для любого адреса, виртуального или нет.
Поскольку все потоки в процессе используют одно и то же адресное пространство, они должны разделить его между собой. А после того, как операционная система приняла свое участие, для приложения остается "всего" 2-3 ГБ. И этот размер является пределом для как физической , так и виртуальной памяти, потому что просто больше нет адресов.
person
Bo Persson
schedule
07.05.2012