7 个解决方案
#1
1、系统不一样,64位的windows 要比32位的复杂的多,不单纯是扩展一下地址长度这么简单。
2、2003架构和2008 完全不一样,你用32位的2003和64位的2003比较还差不多。
3、地址和数据字段长度增加
2、2003架构和2008 完全不一样,你用32位的2003和64位的2003比较还差不多。
3、地址和数据字段长度增加
#2
同样的代码,32、64编译出来binary大小都不同。
#3
我猜是这样的:
因为你32位系统的物理内存少,所以要有大部分的程序要缓存到硬盘上。当你把程序放在64位系统的时候,因为物理内存比较多,所以不需要把很多程序缓存到硬盘上,尽量把程序放在物理内存,所以64位比32位占用内存多
因为你32位系统的物理内存少,所以要有大部分的程序要缓存到硬盘上。当你把程序放在64位系统的时候,因为物理内存比较多,所以不需要把很多程序缓存到硬盘上,尽量把程序放在物理内存,所以64位比32位占用内存多
#4
是默认字节对齐的问题么?
32位是4位,64位是8位吧。。。应该会大点。
你全部改成pragma pack(1)看看。
32位是4位,64位是8位吧。。。应该会大点。
你全部改成pragma pack(1)看看。
#5
这么改,要是代码在windows里还能无错误运行,那是奇迹
当初我就在这上面吃过苦头,编译无问题,普通运行无问题
但是一到某些点,就崩溃,查出的错误还是MFC内部的
#6
1、3、5楼说的都对
#7
32位系统与64位系统因为地址长度不同,所以虚拟地址大小不同,与它们使用的物理内存大小无直接关系(只决定能使用的最大物理内存,如32位最大只能到4G,64位最大到2^64)。当然这就决定了,64位OS比32位能使用更多内存,但这并不能回答题主的问题:为什么会耗费更多内存。
本人觉得应该是:1.地址长度-->命令集不同-->编译后bin变大(由于底层数据调取都与地址相关造成);
2.地址空间变大-->内存页表变大
3.系统复杂-->内核占的内存增多
#1
1、系统不一样,64位的windows 要比32位的复杂的多,不单纯是扩展一下地址长度这么简单。
2、2003架构和2008 完全不一样,你用32位的2003和64位的2003比较还差不多。
3、地址和数据字段长度增加
2、2003架构和2008 完全不一样,你用32位的2003和64位的2003比较还差不多。
3、地址和数据字段长度增加
#2
同样的代码,32、64编译出来binary大小都不同。
#3
我猜是这样的:
因为你32位系统的物理内存少,所以要有大部分的程序要缓存到硬盘上。当你把程序放在64位系统的时候,因为物理内存比较多,所以不需要把很多程序缓存到硬盘上,尽量把程序放在物理内存,所以64位比32位占用内存多
因为你32位系统的物理内存少,所以要有大部分的程序要缓存到硬盘上。当你把程序放在64位系统的时候,因为物理内存比较多,所以不需要把很多程序缓存到硬盘上,尽量把程序放在物理内存,所以64位比32位占用内存多
#4
是默认字节对齐的问题么?
32位是4位,64位是8位吧。。。应该会大点。
你全部改成pragma pack(1)看看。
32位是4位,64位是8位吧。。。应该会大点。
你全部改成pragma pack(1)看看。
#5
这么改,要是代码在windows里还能无错误运行,那是奇迹
当初我就在这上面吃过苦头,编译无问题,普通运行无问题
但是一到某些点,就崩溃,查出的错误还是MFC内部的
#6
1、3、5楼说的都对
#7
32位系统与64位系统因为地址长度不同,所以虚拟地址大小不同,与它们使用的物理内存大小无直接关系(只决定能使用的最大物理内存,如32位最大只能到4G,64位最大到2^64)。当然这就决定了,64位OS比32位能使用更多内存,但这并不能回答题主的问题:为什么会耗费更多内存。
本人觉得应该是:1.地址长度-->命令集不同-->编译后bin变大(由于底层数据调取都与地址相关造成);
2.地址空间变大-->内存页表变大
3.系统复杂-->内核占的内存增多