【备忘】操作系统内存划分

    通常而言,操作系统内存划分为以下几个区域:

  • 寄存器(registers)

    寄存器位于处理器内部,是CPU可以直接控制并进行存取的地方,但数量与容量都有限,所以一般用于高频数据的缓存。该区主要由操作系统直接管理,用户的语言代码没有直接控制权。

  • 栈(stack)

    栈区的存取效率仅次于寄存器,一般是连续的空间,常通过地址指针实时控制。该区的大小在程序运行前就会被设定好,但受限于操作系统及编译器的设置。在程序运行期间,编译器控制着栈区,实现资源的自动分配与释放,用于存储函数参数、局部变量、对象引用等。由于函数的调用及返回会涉及栈区内容的现场恢复等内部操作,所以大量的函数嵌套有可能会因为频繁的栈操作带来性能问题。

  • 堆(Heap)

    这是程序自己可以控制的区域,也叫内存池。该区不受编译器的控制,占用多大或占用多久可由开发者自行控制。不同的语言在堆的管理方式上会有不同。在C/C++这类语言中,对堆堆内存的分配与释放需要使用显式的方式,由开发者自行控制。如果不能在恰当时候释放内存,很容易导致内存泄漏;而且若释放不存在的内存区,也会引发致命的内存操作错误。不过在由垃圾回收机制的语言中,内存分配与释放是自动进行的,开发者几乎不用关注。但是,超出可用内存的数据占用也同样会出现溢出错误。

  • 静态(Static)区

    一般该区用于存储静态变量或者全局变量,即那些不需要改变位置的数据。在一些语言中,可以显示地告知编译器哪些变量是全局的,哪些变量是静态的。该区的控制权在编译器而不在开发者。

  • 常量(Constant)区

    程序中经常会有一些值是始终不变的。这些特殊值存放在一个专门的常量区,不但可以保证数据的安全性也能够提高运行效率。不过,常量区一般是运行期不可变的区域,由编译器直接控制。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值