关于32位机器只支持4g内存的疑问

power0811 2011-08-03 04:37:49
如果32位操作系统只支持最大4g内存的话 我要是给32位机器配 8g内存的话 然后我自己写一个c程序 在malloc() 3g内存的话 是操作系统给我分配在它支持的4g内存以内的空闲内存还是说 我可以申请4g以上 把操作系统用不上的另外4g内存用上呢 如果我配置16g内存 是不是可以自己malloc() 12g内存给我的程序用呢 依次类推 是不是内存越大越好 包括linux和windwos操作系统
请各位指教 多谢
...全文
722 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
xwxxww 2011-08-03
  • 打赏
  • 举报
回复
还有应用程序中使用的地址 叫做 逻辑地址(4G的寻址能力),是指相对于段选择基地址的偏移地址,
而虚拟地址 是48位(64T的寻址能力),
虚拟地址经过分段系统转换成32为的线性地址,
线性地址直接是物理地址(分页机制没有开启), 或者线性地址经分页机制转换为物理地址。
大于4G的内存 只是使有更多的物理地址可以供分页机制使用。
luciferisnotsatan 2011-08-03
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 power0811 的回复:]

那是否可以这样理解 如果我malloc 4g以上内存比如malloc 8g, 操作系统会去调用虚拟内存 肯定不会调用剩余的物理内存呢? 如果我的物理内存是16G 且是双通道的话
[/Quote]
如果你开10个进程,每个malloc 1G,那么你可以用10G物理内存(开启PAE)。
但单个进程里,windows 2G用户态模式,一次malloc个1.8G都不行。windows的系统dll通常都加载到0x7开头处。而程序本身的起始位置是0x00400000
至善者善之敌 2011-08-03
  • 打赏
  • 举报
回复
重说纷纭,还是找权威点的资料看看!
power0811 2011-08-03
  • 打赏
  • 举报
回复
多谢各位达人 呵呵
xwxxww 2011-08-03
  • 打赏
  • 举报
回复
因为32位机的地址总线是32条,所以寻址能力只有 2**32 == 4G,因此不能给用户程序申请大于4G的内存。

即使现在大多数机器有36条地址总线,寻址能力达到了 2**4 * 2**32 == 64G。但是PAE技术对应用程序是不可见,因此最多还是只能使用4G内存。而扩展的内存只能使虚拟地址映射到更多的物理地址上。
13号大王 2011-08-03
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 power0811 的回复:]

那是否可以这样理解 如果我malloc 4g以上内存比如malloc 8g, 操作系统会去调用虚拟内存 肯定不会调用剩余的物理内存呢? 如果我的物理内存是16G 且是双通道的话
[/Quote]

另外,对于应用程序来说,它分不出来物理内存和虚拟内存,都以为是一样的。
这种划分是os的工作,对app来说是透明的。
13号大王 2011-08-03
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 power0811 的回复:]

那是否可以这样理解 如果我malloc 4g以上内存比如malloc 8g, 操作系统会去调用虚拟内存 肯定不会调用剩余的物理内存呢? 如果我的物理内存是16G 且是双通道的话
[/Quote]


单个32位程序的最大可用空间就是4g。
物理内存+虚拟内存 <= 4g
power0811 2011-08-03
  • 打赏
  • 举报
回复
那是否可以这样理解 如果我malloc 4g以上内存比如malloc 8g, 操作系统会去调用虚拟内存 肯定不会调用剩余的物理内存呢? 如果我的物理内存是16G 且是双通道的话
nightkids_008 2011-08-03
  • 打赏
  • 举报
回复
CPU限制你的。。。。
玩笑 2011-08-03
  • 打赏
  • 举报
回复
有2G内存限制,你申请不到那么大的内存,至于32位支持4G内存的问题,还是学学硬件和操作系统实现之类的吧
wjjjuniniho 2011-08-03
  • 打赏
  • 举报
回复
32位操作系统cpu中的地址寄存器就是32位的,最多也就到0~~2^32-1也就是0~(4G-1)的寻址空间,你再怎么malloc也只是代码级别的分配,到底分不分配成功得硬件资源和操作系统说的算

你malloc之后可以判断一下指针是不是空,是空的话说明分配失败的
yin138 2011-08-03
  • 打赏
  • 举报
回复
skyworth98的解释非常正确,一个程序的最大空间是不会超过4G的,而系统要占去一大半。
这里与语言并没有多大关系,因为所有语言最终动态分配函数都会映射到windows上的虚拟内存管理API。
13号大王 2011-08-03
  • 打赏
  • 举报
回复
32位环境下,理论上不可以使用超过4g以外的内存空间。
BUT,你能见到的32位处理器,如P3,P4,基本都有PAE功能,能够寻址4g以外的物理内存。
(CORE i3,5,7不在此列,他们本身就是64位cpu,同时兼容32位)

同事,很多操作系统支持PAE技术。(这就解释了为什么32位的高端windows server系统能够支持超过4g内存)

然而,对于单个32位应用程序,操作系统分配给他的空间最多还是4g,
这是因为每个32位应用程序的“虚拟地址”仍然为32位寻址。

lz可以参考:
http://zh.wikipedia.org/wiki/PAE

skyworth98 2011-08-03
  • 打赏
  • 举报
回复
IA32系统默认支持4G内存,打开PAE之后,最大支持32G内存,实际最大支持物理内存大小受芯片组限制.
对单个程序而言,能用到的内存,不会超过4GB.也就是说,对单个程序来说,即使打开PAE支持,单个程序也无法利用4G以上的物理内存.
Troiph 2011-08-03
  • 打赏
  • 举报
回复
2^32=4G,大于4G CPU已经没有地址分配给它了。。就像IPV4将要被IPV6代替一样
luciferisnotsatan 2011-08-03
  • 打赏
  • 举报
回复
每个进程都有自己的虚拟内存地址空间,32位系统,指针也就是32位,范围从0x00000000~0xffffffff,4G。指针怎么指向4G以外的地址呢??
luciferisnotsatan 2011-08-03
  • 打赏
  • 举报
回复
32为系统,寻址只能4G。分配不了4G以上内存。
而且,高地址是留给内核的(2G或1G)。起始处还有一些不能用的。代码也得占内存。
power0811 2011-08-03
  • 打赏
  • 举报
回复
为什么呢 是操作系统限制了么 无法用到4g以外的其他内存了么 还是说c语言本身限制了呢 其实也不一定要c语言 其他语言也行 只是举个例子 我就想知道 32位机配更大内存的话 到底是有没有用
麻烦说的详细些 多谢 呵呵
luciferisnotsatan 2011-08-03
  • 打赏
  • 举报
回复
其实,你能用的也就1.5G左右
软件名称 Z-FileSplitter (文件离合器) 版本 V1.0 软件授权 免费 权利和限制 本软件为免费共享软件,可任意传播,但请不要对本软件有任何形式的修改。 不能用于商业目的的分发本软件。如捆绑,销售,集成等。 如有任何建议和疑问,可联系本人。 版权 由 作者 个人拥有。 说明 为与其他同类软件相区分,本软件命名为Z-FileSpliter,我称它为Z系列软件,,,至于Z是什么意思嘛,,,它的意思就是 没什么意思,,, 特色功能 * 采用Windows的内存映射文件技术,操作速度大幅度提升,大部分的这类软件不支持4G以上的文件,甚至更小都会假死。 但本软件跨过了4G文件限制的这道技术门坎,理论上能支持目前PC机的任意大的文件。 * 同样受益于内存映射文件技术,本软件提供一个大幅度提升操作速度选项(高级选项中,默认未选中),拆分合并文件速度可再 度提升几倍到几十倍,这取决于机器配置,一个445MB的文件拆分成5个100MB的文件(有一个小于100MB)仅仅花了1秒钟。 * 提供文件循环沉余自校验功能,文件在拆分时可选择加入自校验(高级选项中),这样当在合并时可以支持每个分包文件自校验, 如果文件在传输过程中(如U盘拷贝,网络传输等)哪怕只有有一个字节丢失或者错误,也能自动检验出来并提示,当然,文件就算检验 到错误还是可以强制合并,因为有些文件丢失或损坏一些无关紧要的字节也还能用。 * 使用多线程技术,提供日志窗口,文件分割合并的每一步操作,每一个过程,以及操作耗时都实时的显示在日志窗口,能及时的了解 文件操作状态以及异常信息(如:磁盘空间不足等)。 * 提供 按每个分包文件大小拆分 和 按拆分分包文件个数 两种方式对文件进行分割,分割大小或者分割个数完全自定义。 * 拆分后的文件任意改名都不会影响合并,选择任意一个分包文件,程序将自动在本目录搜索所有分包,显示在列表里。 * 提供多种人性化配置,让用户只选择自己想要的功能。简化操作。默认只是简单的拆分和合并。 * 软件架构设计强大,目前高级选项中的 加密、压缩等功能都能在目前架构下很好的实现,由于时间问题,这些在以后的版本中 可能更新,看有没有人需要咯,别辛苦做了却没人用那就没意义了。 * 集成自动更新功能,让您随时知道版本更新状态,在高级选项中设置不弹出提示,可避免影响使用。 * 完全免费纯绿色无污染,软件尺寸小,且只有一个单独的可执行文件,非常方便和分割后的文件一起打包带走。 * 总之,本软件神马都给力,,,^_^ 由于这是第一个版本,个人想象力以及测试力难免有限,请广大网友多多批评指正,虽然不是很热门的软件,但总有人会用到, 我会尽量把它做到最好。

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧