这种类型的内存是在堆还是堆栈上分配的?

2021-12-24 00:00:00 memory-management stack c++ heap-memory

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

相关文章