社区
C语言
帖子详情
关于32位机器只支持4g内存的疑问
power0811
2011-08-03 04:37:49
如果32位操作系统只支持最大4g内存的话 我要是给32位机器配 8g内存的话 然后我自己写一个c程序 在malloc() 3g内存的话 是操作系统给我分配在它支持的4g内存以内的空闲内存还是说 我可以申请4g以上 把操作系统用不上的另外4g内存用上呢 如果我配置16g内存 是不是可以自己malloc() 12g内存给我的程序用呢 依次类推 是不是内存越大越好 包括linux和windwos操作系统
请各位指教 多谢
...全文
737
19
打赏
收藏
关于32位机器只支持4g内存的疑问
如果32位操作系统只支持最大4g内存的话 我要是给32位机器配 8g内存的话 然后我自己写一个c程序 在malloc() 3g内存的话 是操作系统给我分配在它支持的4g内存以内的空闲内存还是说 我可以申请4g以上 把操作系统用不上的另外4g内存用上呢 如果我配置16g内存 是不是可以自己malloc() 12g内存给我的程序用呢 依次类推 是不是内存越大越好 包括linux和windwos操作系统 请各位指教 多谢
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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左右
文件分割器(宇宙豪华版)
度提升几倍到几十倍,这取决于
机器
配置,一个445MB的文件拆分成5个100MB的文件(有一个小于100MB)仅仅花了1秒钟。 * 提供文件循环沉余自校验功能,文件在拆分时可选择加入自校验(高级选项中),这样当在合并时可以...
4g
内存
装64位WIN7好还是
32位
好(遇到问题,百度后解除疑惑)
建议安装64位系统,否则你的
内存
有些浪费了,在
32位
系统破解大
内存
会出现不可预见的问题。用的
内存
空间多是为了将需要用到的文件放到读取速度更快的
内存
里,更有利于用户获得更佳的体验,而且是根据物理
内存
大小动态...
32位
操作系统单进程最大使用
4G
内存
32位
操作系统单进程最大使用
4G
内存
参考文献: 有此
疑问
的原因:在看jvm书籍时,碰到了介绍“直接
内存
”的内容,直接
内存
不是虚拟机运行时数据区的一部分,所以也就不是jvm名义上管理的部分,同时《java虚拟机规范》...
如何向系统申请
4G
的
内存
空间?
所以我们在这里讨论的是Linux下的
4G
内存
空间的申请。 假如我们现在的Linux一共有
4G
的
内存
空间。那么它有1G是供操作系统内核使用的。也就是说我们程序最多只能申请到3G的空间,事实上,我们最大申请到的空间也就2G...
为何我只能看到3.25GB物理
内存
用win7企业版,看到了4G
内存
只有3.25G可用,于是搜索想知道为什么? 发现这篇解释得比较合理特此转载,不过看下去头有点大,有兴趣了解就看看吧。 一个长期存在的问题又再次被人们所关注:为何我只能看到3.25GB...
C语言
70,023
社区成员
243,263
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章