c++ - 为什么无法在堆栈上分配任意大小的数组?

标签 c++ memory heap-memory dynamic-memory-allocation stack-memory

为什么我不能写以下内容?

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/

相关文章:

c++ - lambda 返回 initializer_list 中的奇怪值

ruby-on-rails - Ruby 中的内存模型

linux - 将堆栈大小增加到 20 gb,出现整数溢出错误

node.js - 从 Node.js 分析核心转储的工具

c++ - 我可以将堆大小设置为 0 吗?

c++ - 靠近原点的实数舍入会导致旋转伪影

c++ - c/c++项目什么时候需要配置文件?

C++ 复数运算符重载

linux - 如何在 Linux Matlab 中获取用于矩阵计算的空闲交换内存?

c - 重新分配结构会导致堆损坏