首頁 > 硬體

C++中的記憶體儲存

2020-10-09 01:56:46

操作方法

  • 01

    在C、C++中,通常可以把記憶體理解為4個分割區:棧、堆、全域性/靜態儲存區和常數儲存區。下面我們分別簡單地介紹一下各自的特點。
    1)棧
    通常是用於那些在編譯期間就能確定儲存大小的變數的儲存區,用於在函數作用域內建立,在離開作用域後自動銷燬的變數的儲存區。通常是區域性變數,函數引數等的儲存區。他的儲存空間是連續的,兩個緊密挨著定義的區域性變數,他們的儲存空間也是緊挨著的。棧的大小是有限的,通常Visual C++編譯器的預設棧的大小為1MB,所以不要定義int a[1000000]這樣的超大陣列。
    2)堆
    通常是用於那些在編譯期間不能確定儲存大小的變數的儲存區,它的儲存空間是不連續的,一般由malloc(或new)函數來分配記憶體塊,並且需要用free(delete)函數釋放記憶體。如果程式設計師沒有釋放掉,那麼就會出現常說的記憶體漏失問題。需要注意的是,兩個緊挨著定義的指標變數,所指向的malloc出來的兩塊記憶體並不一定的是緊挨著的,所以會產生記憶體碎片。另外需要注意的一點是,堆的大小几乎不受限制,理論上每個程式最大可達4GB。
    3)全域性/靜態儲存區
    和「棧」一樣,通常是用於那些在編譯期間就能確定儲存大小的變數的儲存區,但它用於的是在整個程式執行期間都可見的全域性變數和靜態變數。
    4)常數儲存區
    和「全域性/靜態儲存區」一樣,通常是用於那些在編譯期間就能確定儲存大小的常數的儲存區,並且在程式執行期間,儲存區內的常數是全域性可見的。這是一塊比較特殊的儲存去,他們裡面存放的是常數,不允許被修改。
    5)總結
    根據上面的內容,分別將棧和堆、全域性/靜態儲存區和常數儲存區進行對比,結果如下。

  • End

IT145.com E-mail:sddin#qq.com