簡體   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