这种类型的内存是否在堆或堆栈上分配? [英] Does this type of memory get allocated on the heap or the stack?

查看:150
本文介绍了这种类型的内存是否在堆或堆栈上分配?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在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.

        这篇关于这种类型的内存是否在堆或堆栈上分配?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆