zoukankan      html  css  js  c++  java
  • 关于windows内存管理机制

    完整的

    https://blog.csdn.net/vsooda/article/details/8992446

    1.      进程地址空间

    1.1地址空间

    ·        32|64位的系统|CPU

            操作系统运行在硬件CPU上,32位操作系统运行于32位CPU上,64位操作系统运行于64位CPU上;目前没有真正的64位CPU。

    32位CPU一次只能操作32位二进制数;位数多CPU设计越复杂,软件设计越简单。

           软件的进程运行于32位系统上,其寻址位也是32位,能表示的空间是232=4G,范围从0x0000 0000~0xFFFF FFFF。

    ·        NULL指针分区

    范围:0x0000 0000~0x0000 FFFF

    作用:保护内存非法访问

    例子:分配内存时,如果由于某种原因分配不成功,则返回空指针0x0000 0000;当用户继续使用比如改写数据时,系统将因为发生访问违规而退出。

            那么,为什么需要那么大的区域呢,一个地址值不就行了吗?我在想,是不是因为不让8或16位的程序运行于32位的系统上呢?!因为NULL分区刚好范围是16的进程空间。

    ·        独享用户分区

    范围:0x0001 0000~0x7FFE FFFF

    作用:进程只能读取或访问这个范围的虚拟地址;超越这个范围的行为都会产生违规退出。

    例子:

            程序的二进制代码中所用的地址大部分将在这个范围,所有exe和dll文件都加载到这个。每个进程将近2G的空间是独享的。

    注意:如果在boot.ini上设置了/3G,这个区域的范围从2G扩大为3G:0x0001 0000~0xBFFE FFFF。

    ·        共享内核分区

    范围:0x8000 0000~0xFFFF FFFF

    作用:这个空间是供操作系统内核代码、设备驱动程序、设备I/O高速缓存、非页面内存池的分配、进程目表和页表等。

    例子:

           这段地址各进程是可以共享的。                                                                                                                                         

    注意:如果在boot.ini上设置了/3G,这个区域的范围从2G缩小为1G:0xC000 0000~0xFFFF FFFF。

           通过以上分析,可以知道,如果系统有n个进程,它所需的虚拟空间是:2G*n+2G (内核只需2G的共享空间)。

  • 相关阅读:
    小程序全局生命周期( 仅供了解 )
    iview表格render小案例2
    iview中表格根据条件渲染
    如何实现页面同时在移动端和pc端的兼容问题
    小程序页面中的生命周期( 仅供了解 )
    弹性盒基本属性
    elementUI实现分页效果+模糊搜索效果
    事件流 ---- 事件冒泡与事件捕获
    React生命周期
    数据库索引数据结构btree,b-tree和b+tree树
  • 原文地址:https://www.cnblogs.com/ice-arrow/p/15215483.html
Copyright © 2011-2022 走看看