作者Ommm5566 (56天團)
看板C_and_CPP
標題Re: [問題] 有關malloc跟一般變數宣告的差別
時間Sun Nov 13 07:57:10 2016
其實嚴格說起來 所有要到的空間 process都可以管理
先撇開虛擬記憶體不說 當使用者執行了一個程式 系統會把它放入排班
一但要執行此程式 系統就會給予一塊固定大小的連續憶記體空間
這塊連續記憶體空間生命週期就是程式的生命週期
長相也固定 網路上隨便找大概長這樣
http://i.stack.imgur.com/JQjKp.png
大致上分為
stack由上往下塞滿
heap(dynamic variable)由下往上塞滿
然後是固定的空間
global(static variable)和執行指令
( 變數生命週期可以先這樣思考
(除了main()之外的變數和特地宣告成static會在
global區)
一但進入"{" 就push所有參數和變數到
stack
一但離開"}" 就會從stack移除這些變數 然後只留回傳值
所以函式參數是由右往左拿到
(唯一例外是function一旦宣告PASCAL 參數會由左往右拿到)
)
這些區塊基本上是不好操作 比如不易在這裡直接貼塊文章 然後讀取複製搬移
比較好的情況是我畫一塊較大的記憶體空間操作 這樣我很好搬移、複製
這種時候就是alloc使用的時候 其實也只是動用到
heap區
這區間仍然是在一開始說的生命週期 如果不free掉
只是process之後heap可以用的空間少了一塊 很不方便 但不會死人
還有一個情況是動態的需求 比如我無法確定使用者會想輸入幾次資料
那要一開始就宣告陣列array[999999] 可是這樣會很浪費空間
因此靠malloc去管理 vector就是類似的機制
一但滿了就要另一塊兩倍大空間 舊的資料搬過去 然後刪除舊的空間
資料量變少 就要一個一半的空間 資料搬過去 刪除舊的空間
--
作者: fleece (...) 看板: KoreanPop
標題: [問題] 請問一個叫O.S.T的歌手
時間: Fri Feb 19 12:25:09 2016
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 61.223.72.101
※ 文章網址: https://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1478995034.A.DD9.html
※ 編輯: Ommm5566 (61.223.72.101), 11/13/2016 12:03:02