让我们考虑一下这个简单的 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/