【发布时间】:2017-02-19 17:04:53
【问题描述】:
为什么我不能写以下内容?
char acBuf[nSize];
只是为了防止堆栈过度增长? 或者是否有可能做类似的事情,如果我能确保我总是只占用几百 KB?
据我所知,std::string 使用其成员的内存来存储分配的字符串,只要它们不超过 15 个字符。只有当字符串较长时,它才会使用这块内存来存储一些堆分配内存的地址,然后再获取数据。
似乎必须在编译时 100% 确定堆栈在运行时将如何对齐。真的吗?这是为什么呢?
【问题讨论】:
-
是的,这是真的。 C++ 不支持 VLA。
-
如果您要分配给堆栈,(理论上)每个堆栈帧的所有内存都在其范围的开头分配,因此我们有动态存储,其中内存使用分配免费商店。
标签: c++ memory heap-memory dynamic-memory-allocation stack-memory