gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 02:29:05 27 4
gpt4 key购买 nike

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

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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com