作者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/cn.aspx?n=bbs/C_and_CPP/M.1478995034.A.DD9.html
※ 编辑: Ommm5566 (61.223.72.101), 11/13/2016 12:03:02