繁体   English   中英

C ++静态数组导致内存泄漏?

[英]C++ static array leading to memory leak?

可以说我有类似......

void foo()
{
    char c[100];
    printf("this function does nothing useful");
}

当调用foo时,它会在堆栈上创建数组,当它超出范围时,内存是否会自动释放? 或者是c被破坏了,但是内存仍然被分配,没有办法访问/取回它,除了重新启动计算机?

是自动解除分配的内存?

是。 如果你想知道的话,也会调用析构函数。 这就是为什么他们在auto存储类中

(实际上对于大多数架构,程序只会调用100个析构函数(如果有的话),然后将堆栈指针向后移动100 * sizeof(T)字节作为“deallocation”。)

在那种情况下,是的,内存被释放。 如果你做过类似的事情:

int var = 100;
char* c = new char[var];

然后,一旦功能结束,这将留下来。

然而! 您无需重新启动即可在现代操作系统上恢复丢失的内存。 相反,一旦进程(程序)结束,就会返回内存。

要明确的是,这里没有真正的内存分配; 堆栈分配发生。 差别很大,因为前者需要函数调用,从分配系统中保留内存,以及大量开销。 相反,后者只涉及递增堆栈指针。 堆栈分配总是快得多,除非在涉及堆栈损坏的错误的情况下,总是在函数退出时清理。

它消失了 - 一切都消失了。

但是内存可以立即供下一个功能使用。 堆栈只是作为指针实现,当你执行c [100]时,它将指针向下移动100字节,因此请求的下一个内存在c之后。 当您离开该功能时,堆栈指针只会在您进入该功能之前向后移动到之前的位置。 与new / delete / malloc相比,这是一种非常快速有效的内存管理方式

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM