內存分配方式

內存分配方式有三種:

(1) 從靜態(tài)存儲區(qū)域分配。內存在程序編譯的時候就已經分配好,這塊內存在程序的整個運行期間都存在。例如全局變量,static變量。
(2) 在棧上創(chuàng)建。在執(zhí)行函數時,函數內局部變量的存儲單元都可以在棧上創(chuàng)建,函數執(zhí)行結束時這些存儲單元自動被釋放。棧內存分配運算內置于處理器的指令集中,效率很高,但是分配的內存容量有限。
(3)從堆上分配,亦稱動態(tài)內存分配。程序在運行的時候用malloc或new(C/C++)申請任意多少的內存,程序員自己負責在何時用free或delete(C/C++)釋放內存。動態(tài)內存的生存期由我們決定,使用非常靈活,但問題也最多。
摘自林銳第七章

內存的靜態(tài)分配和動態(tài)分配的區(qū)別

內存的靜態(tài)分配和動態(tài)分配的區(qū)別主要是兩個:
一是時間不同。靜態(tài)分配發(fā)生在程序編譯和連接的時候。動態(tài)分配則發(fā)生在程序調入和執(zhí)行的時候。
二是空間不同。堆都是動態(tài)分配的,沒有靜態(tài)分配的堆。棧有2種分配方式:靜態(tài)分配和動態(tài)分配。靜態(tài)分配是編譯器完成的,比如局部變量的分配。動態(tài)分配由函數malloc進行分配。不過棧的動態(tài)分配和堆不同,他的動態(tài)分配是由編譯器進行釋放,無需我們手工實現。

對于一個進程的內存空間而言,可以在邏輯上分成3個部份:代碼區(qū),靜態(tài)數據區(qū)和動態(tài)數據區(qū)。動態(tài)數據區(qū)一般就是“堆?!??!皸?stack)”和“堆(heap)”是兩種不同的動態(tài)數據區(qū),棧是一種線性結構,堆是一種鏈式結構。進程的每個線程都有私有的“棧”,所以每個線程雖然代碼一樣,但本地變量的數據都是互不干擾。一個堆??梢酝ㄟ^“基地址”和“棧頂”地址來描述。全局變量和靜態(tài)變量分配在靜態(tài)數據區(qū),本地變量分配在動態(tài)數據區(qū),即堆棧中。程序通過堆棧的基地址和偏移量來訪問本地變量。

一般,用static修飾的變量,全局變量位于靜態(tài)數據區(qū)。函數調用過程中的參數,返回地址,EBP和局部變量都采用棧的方式存放。
摘自boke:http://blog.csdn.net/liuchao1986105/article/details/6724392

Stack的三種含義

阮一峰boke:http://www.ruanyifeng.com/blog/2013/11/stack.html

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容