来自进程空间的可用内存

时间:2012-08-20 08:33:19

标签: c++

以下是代码:

class x
{
    int k;
};
int main()
{
    x *p=new x[1000000];
    return 0;// can be  1 too
}

现在的问题是,当我们从main函数中出来时,分配的内存被编译器调用析构函数释放,或者它被操作系统释放,因为进程将不再存在。?

4 个答案:

答案 0 :(得分:3)

不会调用任何析构函数,但任何体面的操作系统都将回收已失效进程的所有资源。但是,该标准对实现没有这样的要求。

答案 1 :(得分:1)

除非你说出来,否则C ++不会释放任何内存。我不太熟悉C ++中现有的工作方式,但我很确定这是在这里释放所有内存的操作系统。如果调用exit()函数,C ++可能会为您清理。

答案 2 :(得分:0)

作为开发人员,您应该对此采取应对措施。更好的是使用智能指针。除此之外,一旦程序终止,操作系统应该为你整理。 c ++语言本身无法回收你分配的内存。

答案 3 :(得分:0)

内存未被释放(由编译器):不会调用析构函数。每个new(或new [])必须有相应的delete(或delete []):C ++让您管理记忆,你必须要处理这个问题!顺便说一句,当程序完成运行时,操作系统会回收资源(因此系统会释放使用的内存)。

A* a = new A; 
delete a;

由编译器解释为

// assuming new throws std::bad_alloc upon failure
A* a = ::operator new(sizeof(A)); 
a->A::A();
if ( a != 0 ) {  // a check is necessary for delete
    a->~A(); // DESTRUCTOR IS CALLED BY THE DELETE OPERATOR
    ::operator delete(a);
}

(资料来源:http://www.codeproject.com/Articles/4795/C-Standard-Allocator-An-Introduction-and-Implement