在C++的上下文中(无关紧要):

class Foo{
    private:
        int x[100];
    public:
        Foo();
}

我所学到的东西告诉我,如果您像这样创建Foo实例:
Foo bar = new Foo();

然后,将数组x分配到堆上,但是如果您像这样创建Foo的实例,则:
Foo bar;

然后在堆栈上创建它。

我找不到在线资源来确认这一点。

最佳答案

稍微修改一下示例:

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)

  • 由于类/结构对齐,实际大小可能会略有不同,具体取决于您的编译器和平台。

    07-26 09:29
    查看更多