本文介绍了这种类型的内存是否在堆或堆栈上分配?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
在C ++的语境中(不重要):
In the context of C++ (not that it matters):
class Foo{
private:
int x[100];
public:
Foo();
}
我学到了什么告诉我如果你创建一个Foo的实例所以:
What I've learnt tells me that if you create an instance of Foo like so:
Foo bar = new Foo();
然后数组x在堆上分配,但是如果你创建了Foo的实例,
Then the array x is allocated on the heap, but if you created an instance of Foo like so:
Foo bar;
然后在堆栈上创建。
我无法在线查找资源来确认这一点。
I can't find resources online to confirm this.
对不起,我不能接受多个答案。
sorry, I can't accept more than one answer...thanks for clearing it up guys/gals :)
推荐答案
稍微修改一下你的例子:
Given a slight modification of your example:
class Foo{
private:
int x[100];
int *y;
public:
Foo()
{
y = new int[100];
}
~Foo()
{
delete[] y;
}
}
示例1:
Foo *bar = new Foo();
- x和y在堆上:
- sizeof(int *)在堆上
- sizeof(int)* 100 * 2 + sizeof b $ b
- x and y are on the heap:
- sizeof(Foo*) is created on the stack.
- sizeof(int) * 100 * 2 + sizeof(int *) is on the heap
示例2:
Foo bar;
- x在堆栈上,y在堆上
-
- sizeof(int)* 100在堆栈上(x)+ sizeof(int *)
- y)
根据您的编译器和平台,实际大小可能因类/结构对齐方式略有不同。
Actual sizes may differ slightly due to class/struct alignment depending on your compiler and platform.
这篇关于这种类型的内存是否在堆或堆栈上分配?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!