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

标签 c++ memory-management stack heap-memory

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

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

关于c++ - 这种类型的内存是在堆上还是在栈上分配的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/426737/

相关文章:

ios - 我是否正确创建此 C 数组并将其传递给 Objective-C 方法并使用属性引用它?

c++ - opengl 实例绘图 - 3D 箭头

c++ - 前向声明和类

c++ - 在 C++ 中实现(类型化的)K 组合器

c++ - 静态分配继承对象的数组

java - 调用时无法识别 LinkedList 中的第一个节点数据

C++ 将 HTML 代码显示为网站(CGI 程序)

memory - 关闭 D 垃圾收集器

clojure - Clojure 中的线程安全流行?

c - 为什么我需要设置比实际大小更大的堆栈大小?