遇到一个问题,win2008/win7 64位操作系统上运行32位的程序,内存最大访问地址仍然存在2GB限制。。。
想问下通过配置什么参数可以去除这个限制。原来网上说的改boot.ini /3gb选项,现在boot.ini已经找不到了。。
16 个解决方案
#1
重新编译为64位程序。
#2
编译器比较老,不支持64位程序...
还有别的方法么。。。
#3
只能是重新编译吧。32位程序是运行在64位系统中的32位子环境中的。
#4
重新编译为64位程序。
编译器比较老,不支持64位程序...
还有别的方法么。。。
编译器比较老,是VC6吗?VC6的代码甚至都不用改,可以用VS2005编译成64位的,注意for循环的设置,忘记VS2005在哪里设置了。VC6和VS2005的区别,也就是for循环了,其他问题不大。我们公司不少代码也是VC6改来的,没问题,尝试一下吧。
32位程序最多只能访问那么多内存了,没办法的。
#5
在链接器选项中加上/LARGEADDRESSAWARE,可以增加到接近4GB,另外,64位系统中不需要设置boot.ini。
#6
使用LARGEADDRESSAWARE选项链接的32位应用程序,在32位windows里可以访问3G内存,在64位windows里可以访问4G内存,再多就只能编译成64位了。
#7
重新编译为64位程序。
编译器比较老,不支持64位程序...
还有别的方法么。。。
编译器比较老,是VC6吗?VC6的代码甚至都不用改,可以用VS2005编译成64位的,注意for循环的设置,忘记VS2005在哪里设置了。VC6和VS2005的区别,也就是for循环了,其他问题不大。我们公司不少代码也是VC6改来的,没问题,尝试一下吧。
32位程序最多只能访问那么多内存了,没办法的。
这个程序是在bcb6中编译的, 比较坑爹呢。
#8
使用LARGEADDRESSAWARE选项链接的32位应用程序,在32位windows里可以访问3G内存,在64位windows里可以访问4G内存,再多就只能编译成64位了。
大神,知不知道bcb6有没有类似的链接选项呢。。
#9
这个程序是在bcb6中编译的, 比较坑爹呢。
BCB不懂,只能帮顶了。
#10
在BCDSetting中设置成支持3GB的
#11
在BCDSetting中设置成支持3GB的
bcb6,具体是在哪儿设置呀?
#12
为什么不用文件读写模拟内存读写呢?
参考_lseeki64函数。
参考_lseeki64函数。
#13
总结一下目前取得的进展,
Windows体系操作系统中,程序分为用户态、内核态两种形态,32位程序总共能访问的内存地址有4G,默认情况下其中有2G内存是分给内核模式使用,用户模式能使用的内存最多为2G,而实际情况下一个应用程序最多只能管理到1.6 – 1.7GB的内存。(加上程序本身还有消耗,实际能给用户代码使用的内存更小)
要扩大程序内存使用范围,有以下几种做法:
1、 程序编译为64位。将彻底解决内存访问限制
2、 Window 32位操作系统中,可以通过改变启动参数的方式,将程序默认内核模式占用的内存缩小为1GB,则用户模式能管理的内存能扩大到2.5G左右。具体方式每个版本的windows配置方式均不一样。网上针对每个版本都有详细的配置方法
3、 Window 64位操作系统中,由于32位的程序是运行在它模拟的一套32位子系统环境中,所以通过改变启动参数的方式是不能达到扩大内存范围的效果的。
4、 Visual Studio 2003以上版本,编译程序时可以通过设置LARGEADDRESSAWARE链接选项,达到扩大内存范围的效果。
5、 Bcb6目前还没有找到有效的扩大内存访问范围的方法
Windows体系操作系统中,程序分为用户态、内核态两种形态,32位程序总共能访问的内存地址有4G,默认情况下其中有2G内存是分给内核模式使用,用户模式能使用的内存最多为2G,而实际情况下一个应用程序最多只能管理到1.6 – 1.7GB的内存。(加上程序本身还有消耗,实际能给用户代码使用的内存更小)
要扩大程序内存使用范围,有以下几种做法:
1、 程序编译为64位。将彻底解决内存访问限制
2、 Window 32位操作系统中,可以通过改变启动参数的方式,将程序默认内核模式占用的内存缩小为1GB,则用户模式能管理的内存能扩大到2.5G左右。具体方式每个版本的windows配置方式均不一样。网上针对每个版本都有详细的配置方法
3、 Window 64位操作系统中,由于32位的程序是运行在它模拟的一套32位子系统环境中,所以通过改变启动参数的方式是不能达到扩大内存范围的效果的。
4、 Visual Studio 2003以上版本,编译程序时可以通过设置LARGEADDRESSAWARE链接选项,达到扩大内存范围的效果。
5、 Bcb6目前还没有找到有效的扩大内存访问范围的方法
#14
重新编译为64位程序。
编译器比较老,不支持64位程序...
还有别的方法么。。。
编译器比较老,是VC6吗?VC6的代码甚至都不用改,可以用VS2005编译成64位的,注意for循环的设置,忘记VS2005在哪里设置了。VC6和VS2005的区别,也就是for循环了,其他问题不大。我们公司不少代码也是VC6改来的,没问题,尝试一下吧。
32位程序最多只能访问那么多内存了,没办法的。
for循环,具体是哪里不同呢?学习学习
#15
for循环,具体是哪里不同呢?学习学习
#16
editbin /lardeaddressaware:yes xxxx.exe
#1
重新编译为64位程序。
#2
重新编译为64位程序。
编译器比较老,不支持64位程序...
还有别的方法么。。。
#3
重新编译为64位程序。
编译器比较老,不支持64位程序...
还有别的方法么。。。
只能是重新编译吧。32位程序是运行在64位系统中的32位子环境中的。
#4
重新编译为64位程序。
编译器比较老,不支持64位程序...
还有别的方法么。。。
编译器比较老,是VC6吗?VC6的代码甚至都不用改,可以用VS2005编译成64位的,注意for循环的设置,忘记VS2005在哪里设置了。VC6和VS2005的区别,也就是for循环了,其他问题不大。我们公司不少代码也是VC6改来的,没问题,尝试一下吧。
32位程序最多只能访问那么多内存了,没办法的。
#5
在链接器选项中加上/LARGEADDRESSAWARE,可以增加到接近4GB,另外,64位系统中不需要设置boot.ini。
#6
使用LARGEADDRESSAWARE选项链接的32位应用程序,在32位windows里可以访问3G内存,在64位windows里可以访问4G内存,再多就只能编译成64位了。
#7
重新编译为64位程序。
编译器比较老,不支持64位程序...
还有别的方法么。。。
编译器比较老,是VC6吗?VC6的代码甚至都不用改,可以用VS2005编译成64位的,注意for循环的设置,忘记VS2005在哪里设置了。VC6和VS2005的区别,也就是for循环了,其他问题不大。我们公司不少代码也是VC6改来的,没问题,尝试一下吧。
32位程序最多只能访问那么多内存了,没办法的。
这个程序是在bcb6中编译的, 比较坑爹呢。
#8
使用LARGEADDRESSAWARE选项链接的32位应用程序,在32位windows里可以访问3G内存,在64位windows里可以访问4G内存,再多就只能编译成64位了。
大神,知不知道bcb6有没有类似的链接选项呢。。
#9
这个程序是在bcb6中编译的, 比较坑爹呢。
BCB不懂,只能帮顶了。
#10
在BCDSetting中设置成支持3GB的
#11
在BCDSetting中设置成支持3GB的
bcb6,具体是在哪儿设置呀?
#12
为什么不用文件读写模拟内存读写呢?
参考_lseeki64函数。
参考_lseeki64函数。
#13
总结一下目前取得的进展,
Windows体系操作系统中,程序分为用户态、内核态两种形态,32位程序总共能访问的内存地址有4G,默认情况下其中有2G内存是分给内核模式使用,用户模式能使用的内存最多为2G,而实际情况下一个应用程序最多只能管理到1.6 – 1.7GB的内存。(加上程序本身还有消耗,实际能给用户代码使用的内存更小)
要扩大程序内存使用范围,有以下几种做法:
1、 程序编译为64位。将彻底解决内存访问限制
2、 Window 32位操作系统中,可以通过改变启动参数的方式,将程序默认内核模式占用的内存缩小为1GB,则用户模式能管理的内存能扩大到2.5G左右。具体方式每个版本的windows配置方式均不一样。网上针对每个版本都有详细的配置方法
3、 Window 64位操作系统中,由于32位的程序是运行在它模拟的一套32位子系统环境中,所以通过改变启动参数的方式是不能达到扩大内存范围的效果的。
4、 Visual Studio 2003以上版本,编译程序时可以通过设置LARGEADDRESSAWARE链接选项,达到扩大内存范围的效果。
5、 Bcb6目前还没有找到有效的扩大内存访问范围的方法
Windows体系操作系统中,程序分为用户态、内核态两种形态,32位程序总共能访问的内存地址有4G,默认情况下其中有2G内存是分给内核模式使用,用户模式能使用的内存最多为2G,而实际情况下一个应用程序最多只能管理到1.6 – 1.7GB的内存。(加上程序本身还有消耗,实际能给用户代码使用的内存更小)
要扩大程序内存使用范围,有以下几种做法:
1、 程序编译为64位。将彻底解决内存访问限制
2、 Window 32位操作系统中,可以通过改变启动参数的方式,将程序默认内核模式占用的内存缩小为1GB,则用户模式能管理的内存能扩大到2.5G左右。具体方式每个版本的windows配置方式均不一样。网上针对每个版本都有详细的配置方法
3、 Window 64位操作系统中,由于32位的程序是运行在它模拟的一套32位子系统环境中,所以通过改变启动参数的方式是不能达到扩大内存范围的效果的。
4、 Visual Studio 2003以上版本,编译程序时可以通过设置LARGEADDRESSAWARE链接选项,达到扩大内存范围的效果。
5、 Bcb6目前还没有找到有效的扩大内存访问范围的方法
#14
重新编译为64位程序。
编译器比较老,不支持64位程序...
还有别的方法么。。。
编译器比较老,是VC6吗?VC6的代码甚至都不用改,可以用VS2005编译成64位的,注意for循环的设置,忘记VS2005在哪里设置了。VC6和VS2005的区别,也就是for循环了,其他问题不大。我们公司不少代码也是VC6改来的,没问题,尝试一下吧。
32位程序最多只能访问那么多内存了,没办法的。
for循环,具体是哪里不同呢?学习学习
#15
for循环,具体是哪里不同呢?学习学习
#16
editbin /lardeaddressaware:yes xxxx.exe