zoukankan      html  css  js  c++  java
  • 读书笔记——Windows核心编程(13)Windows内存体系结构

    对于32位进程(0x0000 0000~0xFFFF FFFF),有4GB的地址空间。

    每个进程都有自己专有的地址空间,当进程的各个线程运行时,它们只能访问属于该进程的内存。


    这4GB其实是虚拟地址空间,不是物理存储器。

    为了能够正常读写数据,需要把物理存储器分配或者映射到相应的地址空间,否则将发生访问违规错误(Access Violation)。


    x86 32位 Windows虚拟地址空间的分区

    空指针赋值分区  0x0000 0000——0x0000 FFFF (捕获空指针的赋值)

    用户模式分区      0x0001 0000——0x7FFE FFFF

    64KB禁入分区    0x7FFF 0000——0x7FFF FFFF

    内核模式分区      0x8000 0000——0xFFFF FFFF


    当系统创建一个进程并赋予它地址空间时,可用地址空间中的发部分都是闲置的或尚未分配的。


    为使用这部分的的地址空间,要调用VirtualAlloc分配其中的区域,这个操作被称为预订。(不再使用时,调用VirtualFree释放。)

    分配的粒度为64K,起始地址为分配粒度的整数倍。系统会确保分配的大小正好是系统页面大小的整数倍。

    x86系统的页面大小为4KB。


  • 相关阅读:
    【AGC010E】Rearranging(博弈,图论,拓扑排序)
    【ARC074F】Lotus Leaves(最小割)
    【ARC069F】Flags(2-SAT,Tarjan,线段树优化建图)
    [CTS 2019] 氪金手游
    HDU
    LOJ
    LOJ
    [TJOI 2015] 概率论
    [AGC 018F] Two Trees
    LOJ
  • 原文地址:https://www.cnblogs.com/wlsandwho/p/4202184.html
Copyright © 2011-2022 走看看