之前說到的棧中的區域性變數會隨所在函式的呼叫結束而被立即釋放,儲存在資料段的靜態資料會一直占用記憶體直至程序退出;但堆記憶體的分配和釋放完全由使用者控制,堆記憶體的儲存期從malloc()/calloc()/realloc()開始,到free()結束。
申請記憶體地函式:
功能 :在堆中申請一塊大小為size的連續記憶體
標頭檔案:#include
原型 :void *malloc(size_t size)
引數 :size 為申請記憶體的大小
返回值:成功返回申請記憶體的基位址,失敗返回null
說明 :該函式申請的記憶體是未初始化的。
功能 :在堆中申請乙個具有n個元素的匿名陣列,每個元素大小為size。
標頭檔案:#include
原型 :void *calloc(size_t n , size_t size)
引數 :n 元素個數,size為元素的長度。
返回值:成功返回申請記憶體的基位址,失敗返回null
說明 :該函式申請的記憶體將初始化為0。
功能 :擴充套件指定堆記憶體的大小
標頭檔案:#include
原型 :void realloc(voi * p , size_t size)
引數 :p 為所指定記憶體,size為擴充套件後記憶體的長度。
返回值:成功返回擴充套件後記憶體的基位址,失敗返回null
說明 :該函式申請的記憶體將初始化為0。
功能 :將指標指向的堆記憶體釋放
原型 :void free(void *p)
返回值:無
常見的記憶體錯誤及其對策
堆記憶體 棧記憶體
從堆和棧的功能和作用來通俗的比較,堆主要用來存放物件的,棧主要是用來執行程式的.而這種不同又主要是由於堆和棧的特點決定的 在程式設計中,例如c c 中,所有的方法呼叫都是通過棧來進行的,所有的區域性變數,形式引數都是從棧中分配記憶體空間的。實際上也不是什麼分配,只是從棧頂向上用就行,就好像工廠中的傳...
學習筆記 new delete的堆記憶體操作
c c 中的動態記憶體分配是指程式設計師手動執行記憶體分配。動態分配的內存在堆上分配,非靜態和區域性變數在堆疊上分配記憶體 有什麼應用?他與分配給普通變數的記憶體有什麼不同?如何在c 中分配 取消分配記憶體?普通陣列宣告與使用new 宣告普通陣列與使用new分配記憶體塊之間有區別。最重要的區別是,常...
堆記憶體傳遞
下面一段關於getmemory 的 是面試時最容易出現的題目。發現自己在解釋原理的時候,還是有點 拗口 就來總結一下吧。下例實際上涉及的就是傳參的方式或堆記憶體的傳遞 堆記憶體靠指標來傳遞 傳參的方式 1.值 2.指標 如果變數本身就是乙個指標,把此變數當作乙個物件,就要傳指標的指標?3.引用 實際...