Почему я не могу написать следующее?Почему невозможно выделить массив произвольного размера в стеке?
char acBuf[nSize];
Только для предотвращения переполнения стека? Или есть возможность сделать что-то подобное, если я могу обеспечить, чтобы я всегда принимал всего несколько сотен килобайт?
Насколько я знаю, std::string
использует память своих членов для хранения назначенных строк, если они составляют 15 символов или меньше. Только если строки длиннее, он использует эту память для хранения адреса некоторой памяти, выделенной кучей, которая затем берет данные.
Похоже, что во время компиляции он должен быть установлен на 100%, как стек будет выровнен во время выполнения. Это правда? Почему это?
Да, это правда. C++ не поддерживает VLA. –
Если вы выделяете стек, (теоретически), вся память для каждого стекового кадра выделяется в начале его области, поэтому у нас есть динамическое хранилище, где память распределяется с использованием бесплатного хранилища. – George