夜昙 发表于 2019-10-7 13:16:29

win系统分配给进程的虚拟地址不够用怎么办?

本帖最后由 夜昙 于 2019-10-7 17:05 编辑

32位系统给每个进程分配4G的虚拟地址,如果程序很大,4G的虚拟地址都不够分配给进程,怎么办?再开辟4G的虚拟地址?那指针怎么索引?

tianzhiya 发表于 2019-10-7 17:40:16

我觉得最简单的方法就是创建一个子进程,父进程和子进程使用进程间通讯交换数据,这样父进程就相当于多了一份地址空间可以使用了

lh1996 发表于 2019-10-9 14:53:32

如果您的物理内存是4G内存,建议将总内存加至8-16G。
Win7810的方法:
右击计算机或这台电脑选属性/选择左面的高级系统设置/性能中的设置/高级/虚拟内存选项选择更改/自动管理取消勾选/点选自定义大小/在初始大小和最大值上添上数值,看下面,添好后按设置选项,在按确定就可以了,当然也可以不用设置,我就是这样的,不要去掉自动管理所有驱动器的分页大小选项前面的勾,如果没有进行勾选按确定就可以了。
一般设置与您的内存大小是有关系的:
建议将初始大小和最大值同时设置为你物理内存的1-2倍,比如2G设置为4096MB(2G内存是2倍),3G设置为4608MB(3G内存是1.5倍),4G内存先设置为4096MB(4G的1倍不够在加),6-8G内存或更大就选则自动管理就是了,如果你的物理内存是2G,建议升级一下你的物理内存(初始大小和最大值设置要一致)。
如果6-8G或更大的话,您一定要设置,最大值最大是物理内存是1倍,或少设置一点,初始大小设置半倍,因为物理内存越大,虚拟内存就没必要设置太大了。

夜昙 发表于 2019-10-9 23:12:24

tianzhiya 发表于 2019-10-7 17:40
我觉得最简单的方法就是创建一个子进程,父进程和子进程使用进程间通讯交换数据,这样父进程就相当于多了一 ...

有可能

夜昙 发表于 2019-10-9 23:12:57

lh1996 发表于 2019-10-9 14:53
如果您的物理内存是4G内存,建议将总内存加至8-16G。
Win7810的方法:
右击计算机或这台电脑选属性/选择 ...

虚拟内存和虚拟地址不是一个概念

人造人 发表于 2019-10-11 22:06:08

程序要使用内存,就会调用内存申请函数,例如C语言的malloc函数,C++的new关键字
如果已经没有内存地址空间可以分配了,那么这类内存申请函数会失败,返回NULL或者抛异常,表示没有内存可用了
举个例子,你是64位系统,安装了16GB内存,一个32位的程序一直申请内存,当把4GB内存地址空间用完后这类内存申请函数会失败,这样就强制这个程序只能使用4GB地址空间

当然,4GB内存空间是操作系统和应用程序共用的,操作系统好像是占用1GB,应用程序只能使用3GB内存空间,用完了3GB内存空间就没得用了,因为内存申请函数会失败,程序不会有更多的内存地址可用

如果程序很大,4G的虚拟地址都不够分配给进程,怎么办?
这取决于这个程序,一个程序想用内存,唯一的办法就是调用内存申请函数,如果内存申请函数失败了,那么这个程序该怎么做?
1.直接调用exit类函数退出
2.释放一部分内存,然后重新申请内存,这样还是使用4GB内存地址空间

人造人 发表于 2019-10-11 22:22:08

如果程序很大,4G的虚拟地址都不够分配给进程,怎么办?

程序很大是什么意思?一个5GB的exe文件?
那我认为操作系统根本就不会去加载这个文件,直接报错
以上是我猜的,没有亲自测试过,也没有什么官方文档参考
不过我认为我的猜测是正确的

还有就是,链接器真的能链接出一个5GB的32位exe文件吗?应该不能吧?(我指的5GB是全部要分配地址空间的那部分,你说你有一个5GB的exe文件,调试信息占4GB,只有1GB分配有内存地址空间,我认为这样的程序可以运行,起码从理论上可行)

人造人 发表于 2019-10-11 22:23:52

如果程序很大,4G的虚拟地址都不够分配给进程,怎么办?

要么这个程序根本就不能运行,要么在4GB的临界点程序因为没有内存可用而出错,或者自愿退出

NAME_绝 发表于 2019-10-17 23:33:01

我觉得你这个问题没有意义,首先,32位操作系统不可能加载一个超过3G的32位可执行文件,这是系统运行机制的限制,其次,32位系统的最大寻址空间只有4G,也就是说32位操作系统内部维护的虚拟地址表只有4G的地址,但应用程序实际可用的只有3G,如果32位进程申请超过3G的内存,操作系统会直接杀死这个进程,或者直接崩溃或者抛出异常,还有,链接器是不可能链接出超过4G的32位应用程序的

jackz007 发表于 2019-10-18 02:02:52

本帖最后由 jackz007 于 2019-10-18 02:07 编辑

       楼上各位都是纸上谈兵啊,各种不可能,不过,我本人孤陋寡闻,也坚定地支持这一观点。但不知楼主为何有此一问,莫非亲见过有这样的实例,给大家解释一下呗?
页: [1]
查看完整版本: win系统分配给进程的虚拟地址不够用怎么办?