其实严格说起来 所有要到的空间 process都可以管理
先撇开虚拟内存不说 当使用者执行了一个程式 系统会把它放入排班
一但要执行此程式 系统就会给予一块固定大小的连续忆记体空间
这块连续内存空间生命周期就是程式的生命周期
长相也固定 网络上随便找大概长这样
![]()
大致上分为 stack由上往下塞满 heap(dynamic variable)由下往上塞满
然后是固定的空间global(static variable)和执行指令
( 变量生命周期可以先这样思考
(除了main()之外的变量和特地宣告成static会在global区)
一但进入"{" 就push所有参数和变量到stack
一但离开"}" 就会从stack移除这些变量 然后只留回传值
所以函式参数是由右往左拿到
(唯一例外是function一旦宣告PASCAL 参数会由左往右拿到)
)
这些区块基本上是不好操作 比如不易在这里直接贴块文章 然后读取复制搬移
比较好的情况是我画一块较大的内存空间操作 这样我很好搬移、复制
这种时候就是alloc使用的时候 其实也只是动用到heap区
这区间仍然是在一开始说的生命周期 如果不free掉
只是process之后heap可以用的空间少了一块 很不方便 但不会死人
还有一个情况是动态的需求 比如我无法确定使用者会想输入几次资料
那要一开始就宣告阵列array[999999] 可是这样会很浪费空间
因此靠malloc去管理 vector就是类似的机制
一但满了就要另一块两倍大空间 旧的资料搬过去 然后删除旧的空间
资料量变少 就要一个一半的空间 资料搬过去 删除旧的空间