社区
进程/线程/DLL
帖子详情
为什么64kb禁入区要64kb??
toyasimple
2009-07-13 12:55:21
看windows程序内存的使用。说通常被分四个区
其中NULL指针分区,跟禁入区都为64kb,
我想问问,是否一定要64kb, 64kb是不是实现起来有好处?(64kb是16位,这我知道)。
但如果要特殊值,为什么不用4k, 一个页面大小也是特殊的啊?
另外这NULL指针分区,跟禁入区,在用户模式访问不了。那在内核模式可以访问吗?(我猜想也访问不了,但想确认一下)
另外NULL指针分区跟禁入区,为什么不放在一起,要放两个地方?是不是为了兼容?
...全文
386
5
打赏
收藏
为什么64kb禁入区要64kb??
看windows程序内存的使用。说通常被分四个区 其中NULL指针分区,跟禁入区都为64kb, 我想问问,是否一定要64kb, 64kb是不是实现起来有好处?(64kb是16位,这我知道)。 但如果要特殊值,为什么不用4k, 一个页面大小也是特殊的啊? 另外这NULL指针分区,跟禁入区,在用户模式访问不了。那在内核模式可以访问吗?(我猜想也访问不了,但想确认一下) 另外NULL指针分区跟禁入区,为什么不放在一起,要放两个地方?是不是为了兼容?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
everhaitao2
2010-01-15
打赏
举报
回复
为什么4kB 分页机制最后的12位偏移地址 决定了页是4KB
为什么64KB 因为分配粒度目前暂定 64KB 为了保持兼容。所以null和禁入区是最小64KB。分配粒度64KB是为了考虑以后cpu发展到64KB页面大小的时候可以和现在的程序兼容。
cpu特权级可以访问null和禁入。不放一起是功能不同,一个是捕获指针用 一个是分开分区用。
hxfjb
2010-01-15
打赏
举报
回复
估计是为了兼容,以前是这么做的,现在也就这么做了。
不过内存都是虚拟内存,在逻辑上做了划分,通常在应用中,*(LPVOID)0 = 100是会报错的,
不过只要你合适地调用ntdll中的函数,可以做到*(LPVOID)0 = 100是正确的。
toyasimple
2009-07-13
打赏
举报
回复
《windows核心编程》第三部分都是讲内存管理的。第13章windows内存结构就讲到这样的分区。
开始问问题的时候,我没有考虑到分配粒度,多谢一楼提醒。
书中也说到,“但是,截止到撰写本书时,所有的C P U平台(x 8 6、3 2位A l p h a、6 4位A l p h a和I A - 6 4)都使用6 4 K B这个相同的分配粒度”。
但是,为什么要用64k呢? 按道理,页面通常为4k或者8k, 那分配粒度为什么不设置为跟页面大小一样呢?我隐约觉得跟64k是2的16次方有关系。但从硬件或者软件设计的角度来说,64k有什么好处啊? 是不是这样就可以用另16位就可以表示不同的分配啊??
biweilun
2009-07-13
打赏
举报
回复
LZ的关于windows程序内存的解释是哪里看来的?愿闻其详
chehw
2009-07-13
打赏
举报
回复
win32下GetSystemInfo获取的SYSTEM_INFO中的dwAllocationGranularity(内存分配粒度)通常为64K
VirtualAlloc分配内存时起始地址会根据AllocationGranularity而取整.
Windows内存管理
Windows 的内存结构可以分为四个部分:空指针赋值分
区
、用户模式分
区
、
64KB
禁入
分
区
和内核模式分
区
。每个部分都有其特定的作用和地址范围。 * 空指针赋值分
区
:地址 0x00-0xFFFF,用于给空指针赋值,不能被操作,...
为什么1KB=1024B,而不等于1000B?
为什么1KB=1024B,而不等于1000B? 前言 首先,不太清楚计算机中表示数据大小单位的可以参照我的这篇文章[https://blog.csdn.net/qq_36659384/article/details/114085161] 正文 众所周知,日常生活中的开关有打开和...
【Windows核心编程笔记】第十三章 Windows的内存结构
每个进程都有它自己的私有地址空间(虚拟的) 虚拟地址空间的分
区
: 空指针赋值分
区
用于帮助程序员捕获空指针的赋值,此分
区
禁止读写,你也没办法...
64KB
禁入
分
区
位于用户方式分
区
上面,保留此分
区
是微软...
C13、Windows的内存结构
32位进程是4GB(0x00000000~0xFFFFFFFF),64位为16EB(0x0000000000000000~0xFFFFFFFFFFFFFFFF)。n 运行的线程只能访问它自己的进程的内存,属于其他进程的内存则隐藏,不能被访问。在Win2000,OS的内存也隐藏...
Windows内存结构
《Windows核心编程》的一点笔记:13.1 进程的虚拟地址空间布局13.1.1 ...对于3 2位进程来说,这个地址空间是4GB,Win2K在IA-32架构的CPU下面的进程地址空间分布如下表所示:地址空间说明地址空间64K NULL指针分配
区
进程/线程/DLL
15,466
社区成员
49,169
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章