Кто контролирует максимальный размер стека по умолчанию; ОС или компилятор?
Компилятор обычно. ОС / аппаратное обеспечение ограничивает его в определенной степени. По умолчанию 8 МБ на Linux IIRC. Подумайте о ulimit -s
в Linux (чтобы изменить размеры стека).
Максимально ли масштабируется по умолчанию в соответствии с общим объемом памяти? (т. е. машина с объемом памяти 2 ГБ будет иметь больший размер по умолчанию, чем машина с всего 512 МБ). Для этого примера обе машины имеют одинаковую настройку ОС / компилятора, просто разные объемы системной памяти.
Нет. До тех пор, пока вы сами этого не сделаете. Вы можете изменять размеры стека с помощью переключателей компилятора.
ld --stack=<STACK_SIZE>
или
gcc -Wl,--stack=<STACK_SIZE>
Стандарт C ++ принимает проблему стеков и куч:
Стандарт основан на абстрактной машине и на самом деле не касается аппаратных средств, стеков или куч. Это говорит о выделенном магазине и бесплатном магазине. Бесплатный магазин - это то, где вы были бы, если вы звоните новым (в основном). FWIW, реализация может иметь только одну область памяти, маскирующуюся как под стек, так и под кучу, когда дело доходит до размещения объектов.
Поэтому ваш вопрос сводится к проблеме, связанной с реализацией, а не к языковой проблеме.
Надеюсь, это поможет.