这是栈上的分配:
char inStack[10];
// and
MyStruct cl;
这应该在堆中分配:
char* inHeap = new char[10];
// and
MyClass cl = new MyClass();
如果 MyClass
包含一个 char test[10]
变量怎么办?这样做:
MyClass cl = new MyClass()
...意味着 MyClass::test
的 10 字节长的内容分配在堆中而不是堆栈中?
最佳答案
会在对象内部分配,这样如果对象在堆上,数组也会在堆上;如果对象在栈上,数组也会在栈上;如果对象在可执行文件的静态内存中,数组也会在那里。
在 C++ 中,对象的成员是对象本身的一部分。如果你有对象的地址和它的大小,你就会知道类的所有成员都将在 [address, address + size)
范围内的某个地方,无论该地址实际上在内存中的哪个位置是(堆、栈等)。
关于C++堆或堆栈分配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10587778/