首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >c++堆还是堆栈分配?

c++堆还是堆栈分配?
EN

Stack Overflow用户
提问于 2012-05-15 00:55:30
回答 3查看 575关注 0票数 5

这是堆栈上的分配:

代码语言:javascript
复制
char inStack[10]; 
// and 
MyStruct cl;

并且这应该在堆中分配:

代码语言:javascript
复制
char* inHeap = new char[10];
// and
MyClass cl = new MyClass();

如果MyClass包含char test[10]变量怎么办?执行以下操作:

代码语言:javascript
复制
MyClass cl = new MyClass()

MyClass::test的10字节长内容被分配在堆中而不是堆栈中,这是...mean吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-05-15 00:57:07

它将被分配到对象内部,因此,如果对象在堆上,则数组将在堆上;如果对象在堆栈上,则数组将在堆栈上;如果对象在可执行文件的静态内存中,则数组也在堆栈上。

在C++中,对象的成员是对象本身的一部分。如果你知道对象的地址和它的大小,你就知道类的所有成员都会在[address, address + size)范围内的某个地方,不管这个地址实际上在内存中的什么地方(堆、栈等)。

票数 15
EN

Stack Overflow用户

发布于 2012-05-15 00:58:04

如果MyClass有一个char test[10]成员,它将以与分配MyClass实例相同的方式分配给

代码语言:javascript
复制
MyClass mc; //mc.test is on the stack
MyClass * mcp = new MyClass; //mcp->test is on the heap
票数 5
EN

Stack Overflow用户

发布于 2012-05-15 02:26:02

语言中恰当的术语是自动和动态存储,这比堆栈和堆更有意义。特别是,自动存储通常并不意味着堆栈,只是在函数的局部变量中,但正如您所提到的,如果您正在定义类的成员,则自动存储将位于封闭对象所在的任何位置,可以是堆栈、堆或静态对象。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10587778

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档