C++堆或堆栈分配?

标签 c++ memory heap-memory stack-memory

这是栈上的分配:

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/

相关文章:

python - 所有对象都是按值返回而不是按引用返回吗?

java - JVM以编程方式获取堆中最大的对象

c++ - 存储指向 std::string 数据的指针是否安全?

c# - 在 C# 中使用 C++ 会有任何性能问题吗?

c++ - Xcode 中没有可行的重载 '=' 错误(Eclipse 未显示错误)

java - 在Java中使用大型XML DOM时减少内存占用

c# - 随机化非常大的文本文件的行

C++ 以正确的方式在堆上声明静态连续多维数组

c++ - EOF 和 GETCHAR 结束循环

c - 在堆数组上使用数组初始化符号