堆内存与栈内存的区别
生活随笔
收集整理的這篇文章主要介紹了
堆内存与栈内存的区别
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、程序在編譯的時候占用的內存分為以下幾個部分:
1 、棧區( stack )— 由編譯器自動分配釋放 ,存放函數的參數值,局部變量的值等。其操作方式類似于數據結構中的棧。棧內存分配運算內置于處理器的指令集中,效率很高,但是分配的內存容量有限.
2 、堆區( heap )— 亦稱動態內存分配.程序在運行的時候用malloc或new申請任意大小的內存,程序員自己負責在適當的時候用free或delete釋放內存。動態內存的生存期可以由我們決定,如果我們不釋放內存,程序將在最后才釋放掉動態內存.但是,良好的編程習慣是:如果某動態內存不再使用,需要將其釋放掉,否則,我們認為發生了內存泄漏現象。注意它與數據結構中的堆是兩回事,分配方式倒是類似于鏈表.
3 、全局區(靜態區)( static )— 全局變量和靜態變量的存儲是放在一塊的,初始化的全局變量和靜態變量在一塊區域,未初始化的全局變量和未初始化的靜態變量在相鄰的另一塊區域。程序結束后由有系統釋放.
4 、常量區 — 常量字符串就是放在這里的.程序結束后由系統釋放.
5 、程序代碼區 — 存放函數體的二進制代碼.
例子程序:
這是一個前輩寫的,非常詳細
//main.cpp
int a = 0; 全局初始化區
char *p1; 全局未初始化區
main()
{
int b; 棧
char s[] = "abc"; 棧
char *p2; 棧
char *p3 = "123456
1 、棧區( stack )— 由編譯器自動分配釋放 ,存放函數的參數值,局部變量的值等。其操作方式類似于數據結構中的棧。棧內存分配運算內置于處理器的指令集中,效率很高,但是分配的內存容量有限.
2 、堆區( heap )— 亦稱動態內存分配.程序在運行的時候用malloc或new申請任意大小的內存,程序員自己負責在適當的時候用free或delete釋放內存。動態內存的生存期可以由我們決定,如果我們不釋放內存,程序將在最后才釋放掉動態內存.但是,良好的編程習慣是:如果某動態內存不再使用,需要將其釋放掉,否則,我們認為發生了內存泄漏現象。注意它與數據結構中的堆是兩回事,分配方式倒是類似于鏈表.
3 、全局區(靜態區)( static )— 全局變量和靜態變量的存儲是放在一塊的,初始化的全局變量和靜態變量在一塊區域,未初始化的全局變量和未初始化的靜態變量在相鄰的另一塊區域。程序結束后由有系統釋放.
4 、常量區 — 常量字符串就是放在這里的.程序結束后由系統釋放.
5 、程序代碼區 — 存放函數體的二進制代碼.
例子程序:
這是一個前輩寫的,非常詳細
//main.cpp
int a = 0; 全局初始化區
char *p1; 全局未初始化區
main()
{
int b; 棧
char s[] = "abc"; 棧
char *p2; 棧
char *p3 = "123456
總結
以上是生活随笔為你收集整理的堆内存与栈内存的区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 偏差/方差、经验风险最小化、联合界、一致
- 下一篇: 词权重计算及应用