为什么我不能写以下内容?
char acBuf[nSize];
只是为了防止堆栈过度增长? 或者是否有可能做类似的事情,如果我能确保我总是只占用几百 KB?
据我所知,std::string
使用其成员的内存来存储分配的字符串,只要它们不超过 15 个字符即可。仅当字符串较长时,它才会使用此内存来存储一些堆分配内存的地址,然后获取数据。
似乎必须在编译时 100% 确定堆栈在运行时将对齐的方式。真的吗?这是为什么?
最佳答案
它与防止堆栈溢出无关,您可以使用 char a[SOME_LARGE_CONSTANT]
很好地溢出堆栈。在 C++ 中,必须在编译时知道数组大小,这是计算包含数组的结构的大小所需要的。
另一方面,自 C99 以来,C 具有可变长度数组,这增加了一个异常(exception)并允许函数范围内的数组的运行时依赖大小。至于为什么C++没有这个?它从未被 C++ 标准采用。
关于c++ - 为什么无法在堆栈上分配任意大小的数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39972448/