C ++中的全局动态分配变量

时间:2015-04-04 23:00:13

标签: c++ memory-leaks heap dynamic-memory-allocation static-memory-allocation

有三种内存:静态内存(静态变量/成员,全局变量),堆栈和堆。

全局变量的定义是在任何函数之外定义的变量。

我想知道下面的代码,

#include<iostream>
int *test=new int[5]();
int main(){
  return 0;
}

可以编译和运行。但我想知道的是,该阵列分配在哪里?它是堆上的全局变量吗?

C ++ Primer表示程序完成后将释放全局变量。我的问题是,即使它们在堆上也会发生这种情况吗?

1 个答案:

答案 0 :(得分:1)

指针test只是一些变量(指针类型)。它被分配在内存的静态部分,但它所指向的内容(即5 int s的内存)是在堆上分配的一些内存块。后者不会被自动解除分配。用于存储指针test的内存(最常见的是4或8个字节,具体取决于机器)确实会在程序终止时标记为可用,但不会指向指针指向的内存。要说服自己,试试这个:

#include <iostream>

struct Foo
{
    Foo()
    {
        std::cout << "Foo()" << std::endl;
    }
    ~Foo()
    {
        std::cout << "~Foo()" << std::endl;
    }
};

Foo* pFoo = new Foo; // no automatic destructor call at exit, memory/resource leak

// destructor is called below, as Foo (and not Foo*) is now global 
// (and not a pointer-to-Foo that has no destructor, thanks @Konrad Rudolph)
Foo foo; 

int main()
{

}