Re: [問題] 有關malloc跟一般變數宣告的差別

看板C_and_CPP (C/C++)作者 (56天團)時間9年前 (2016/11/13 07:57), 9年前編輯推噓0(000)
留言0則, 0人參與, 最新討論串3/3 (看更多)
其實嚴格說起來 所有要到的空間 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://www.ptt.cc/bbs/C_and_CPP/M.1478995034.A.DD9.html ※ 編輯: Ommm5566 (61.223.72.101), 11/13/2016 12:03:02
文章代碼(AID): #1O9wnQtP (C_and_CPP)
文章代碼(AID): #1O9wnQtP (C_and_CPP)