2021-05-12 11:00:58
C++中的記憶體儲存
操作方法
-
01
在C、C++中,通常可以把記憶體理解為4個分割區:棧、堆、全域性/靜態儲存區和常數儲存區。下面我們分別簡單地介紹一下各自的特點。
1)棧
通常是用於那些在編譯期間就能確定儲存大小的變數的儲存區,用於在函數作用域內建立,在離開作用域後自動銷燬的變數的儲存區。通常是區域性變數,函數引數等的儲存區。他的儲存空間是連續的,兩個緊密挨著定義的區域性變數,他們的儲存空間也是緊挨著的。棧的大小是有限的,通常Visual C++編譯器的預設棧的大小為1MB,所以不要定義int a[1000000]這樣的超大陣列。
2)堆
通常是用於那些在編譯期間不能確定儲存大小的變數的儲存區,它的儲存空間是不連續的,一般由malloc(或new)函數來分配記憶體塊,並且需要用free(delete)函數釋放記憶體。如果程式設計師沒有釋放掉,那麼就會出現常說的記憶體漏失問題。需要注意的是,兩個緊挨著定義的指標變數,所指向的malloc出來的兩塊記憶體並不一定的是緊挨著的,所以會產生記憶體碎片。另外需要注意的一點是,堆的大小几乎不受限制,理論上每個程式最大可達4GB。
3)全域性/靜態儲存區
和「棧」一樣,通常是用於那些在編譯期間就能確定儲存大小的變數的儲存區,但它用於的是在整個程式執行期間都可見的全域性變數和靜態變數。
4)常數儲存區
和「全域性/靜態儲存區」一樣,通常是用於那些在編譯期間就能確定儲存大小的常數的儲存區,並且在程式執行期間,儲存區內的常數是全域性可見的。這是一塊比較特殊的儲存去,他們裡面存放的是常數,不允許被修改。
5)總結
根據上面的內容,分別將棧和堆、全域性/靜態儲存區和常數儲存區進行對比,結果如下。 - End
相關文章
-
7+2強化供電!599元梅捷SY-狂龍H510M圖賞
除了廣為人知的Z590和B560之外,英特爾還發布了入門級的H510晶片組,也是上一代H410晶片組的升級版。 在相容性方面,H510晶片組與Z590晶片組和B560晶片組沒有什麼區別,都可以相容1
2021-05-10 19:00:28
-
支援5333高頻記憶體!技嘉小雕PRO B560M主機板圖賞
Intel第十一代酷睿已經上市,新架構帶來了巨大的IPC提升幅度,同時,Intel還開放了B560/H570主機板的記憶體超頻功能,這使得主流玩家也可以輕鬆享受高頻記憶體帶來的流暢遊戲體驗。
2021-05-09 16:00:04
-
24K純金!微星MEG Z590 ACE GOLD EDITION戰神至臻圖賞
顯示卡、散熱器、風扇都能玩RGB,機箱中,主機板幾乎是最不起眼的存在。 而近日,微星推出了一款亮眼的主機板,首次用上了24K純金設計,它就是MEG Z590 ACE戰神至臻,一起來瞧瞧。 MEG
2021-05-07 22:00:14