c++ - C++ 标准对局部变量的存储、分配有什么保证?

标签 c++ memory standards

让我们考虑一下这个简单的 C++ 代码:

struct vector3d { double x, y, z; };

void foo()
{
    vector3d v;
    ...
}

对于 v 的位置,C++ 是怎么说的?我的猜测是:什么都没有,这是有道理的,因为 C++ 不应该为这些底层内存概念而烦恼。

但是,如果 C++ 标准不讨论堆栈、堆以及动态内存分配的具体概念,它如何保证在这种情况下编译器不会选择通过对 的底层调用来翻译这一行malloc 而不是经典的 sub rsp, X?

如果它不保证任何东西,C 是否保证某些东西(出于好奇)?所有 C++ 开发人员都普遍认为这将在堆栈上吗?

谢谢!

最佳答案

你是对的,C++ 标准没有直接说明这一点。实际上,从标准的 POV 来看,“堆栈”或“堆”等概念没有意义。

这实际上是一个实现质量问题,除了假设的 Hell++(其座右铭是“坚持 RAW 并尽可能违反 RAI”)之外,没有编译器有理由存储自动持续时间的局部变量在堆上。

关于c++ - C++ 标准对局部变量的存储、分配有什么保证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50447499/

相关文章:

c++ - 递归STL映射

c++ - 是否可以用汇编语言编写 dllexport(然后是 dllimport)函数?

c++ - 如何使用 gsoap 在 c++ 中将 header 信息传递给 soap header SOAP_ENV__Header

c++ - 如何确定 PdhExpandWildCardPath 结果中的主要网络适配器?

javascript - JavaScript 如何决定为数值分配多大的内存?

python - 为什么重新创建 JAX numpy 数组并将其重新分配给相同的变量名称时 GPU 内存会增加?

c - 为什么 `putwchar()` 、 `fputwc()` 和 `putwc()` 的参数类型不是 `wint_t` ?

c - 数据存入heap后,如何存入struct而不致栈溢出?

html - 有效的字体系列名称

python - 如果我的 python 类名有首字母缩写词,我应该将其保留为大写,还是只保留第一个字母?