我正在阅读有关静态内存分配和动态内存分配的内容。静态内存基本上是int a = 2;
,其中a
的空间在堆栈上分配。但是,如果我这样做,int * a = new int; *a = 3
,这里的内存是在堆上分配的。但是,前者也可以称为自动内存分配吗?谢谢!
答案 0 :(得分:7)
忘掉堆栈和堆。这些术语没有在C ++标准中定义(堆栈展开和std::stack
之类的东西除外)。您所说的是存储持续时间,可以是:
动态存储持续时间适用于使用new
创建的对象。这些对象一直存在,直到你delete
为止。
自动适用于未声明为static
或extern
的块范围变量,与函数中的局部变量一样。当块结束时,它们会被自动(适当地)销毁。
线程用于声明为thread_local
的变量。它们一直存在,直到创建它们的线程结束。
静态用于其他任何内容,通常是在文件范围或static
关键字中声明的变量。这些变量在程序期间存在。