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

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

问题描述

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

推荐答案

对您的示例稍作修改:

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(Foo*) 在堆栈上创建.
  • sizeof(int) * 100 * 2 + sizeof(int *) 在堆上
  • 示例 2:

    Foo bar;
    

    • x 在栈上,y 在堆上
    • sizeof(int) * 100 在栈上 (x) + sizeof(int*)
    • sizeof(int) * 100 在堆 (y) 上
    • 实际大小可能因类/结构对齐而略有不同,具体取决于您的编译器和平台.

      Actual sizes may differ slightly due to class/struct alignment depending on your compiler and platform.

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

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