静态内存分配和自动内存分配之间有什么区别吗?

时间:2015-07-17 13:44:53

标签: c++

我正在阅读有关静态内存分配和动态内存分配的内容。静态内存基本上是int a = 2;,其中a的空间在堆栈上分配。但是,如果我这样做,int * a = new int; *a = 3,这里的内存是在堆上分配的。但是,前者也可以称为自动内存分配吗?谢谢!

1 个答案:

答案 0 :(得分:7)

忘掉堆栈和堆。这些术语没有在C ++标准中定义(堆栈展开和std::stack之类的东西除外)。您所说的是存储持续时间,可以是:

  • 静态
  • 螺纹
  • 自动
  • 动态

动态存储持续时间适用于使用new创建的对象。这些对象一直存在,直到你delete为止。

自动适用于未声明为staticextern的块范围变量,与函数中的局部变量一样。当块结束时,它们会被自动(适当地)销毁。

线程用于声明为thread_local的变量。它们一直存在,直到创建它们的线程结束。

静态用于其他任何内容,通常是在文件范围或static关键字中声明的变量。这些变量在程序期间存在。