簡體   English   中英

如何在C ++中釋放動態分配的數組?

[英]How do dynamically allocated arrays get freed in C++?

我知道您必須這樣做:

int * p;
p = new int[10];

//use array

delete [] p;

現在我的問題是:由於沒有明確說明,如何釋放正確數量的內存? 操作系統是否跟蹤分配的內存及其起始地址?

是的,操作系統(或更可能是庫)會保持跟蹤。

當您分配內存時,操作系統會為您的內存創建一個小標題,該標題通常恰好在您分配的內存之前-也就是說,地址稍微低了幾個字節。

釋放內存時,它將使用釋放的指針,返回幾個字節,然后檢查描述實際分配的內容(包括分配的大小)的結構。

運行時庫將跟蹤分配的內存塊。 給定new返回的初始指針,可以保證正確地釋放該塊。

盡管這可以在OS本身中實現(理論上),但通常不是。 OS跟蹤的是分配給整個進程的頁面,而不是在此抽象級別分配的單個塊。

這完全取決於實現。 就像常規的malloc()/ free()一樣,系統必須像您提到的那樣保存一些額外的信息。 通常,對malloc()或new運算符的調用會在指針返回給您之前在內存中建立一個標頭結構,以便稍后,在調用free()或delete運算符時,它可以找出發生了什么情況與您傳遞的內存塊。

它取決於實現,但是我認為運行時庫使用某種內存分配表來跟蹤分配的塊。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM