同样的程序,为什么在64位系统上使用的内存会比32位上的多?

时间:2021-08-03 03:31:30
服务器程序,一个在windows server 2003(32位)上运行,一个在2008(64位)上运行,而且2003上开的线程数量比2008还多,但2003上使用的内存比2008上少了100M,有谁对这方面比较熟悉吗?

7 个解决方案

#1


1、系统不一样,64位的windows 要比32位的复杂的多,不单纯是扩展一下地址长度这么简单。
2、2003架构和2008 完全不一样,你用32位的2003和64位的2003比较还差不多。
3、地址和数据字段长度增加

#2


同样的代码,32、64编译出来binary大小都不同。

#3


我猜是这样的:
因为你32位系统的物理内存少,所以要有大部分的程序要缓存到硬盘上。当你把程序放在64位系统的时候,因为物理内存比较多,所以不需要把很多程序缓存到硬盘上,尽量把程序放在物理内存,所以64位比32位占用内存多

#4


是默认字节对齐的问题么?
32位是4位,64位是8位吧。。。应该会大点。

你全部改成pragma pack(1)看看。

#5


引用 4 楼 tiger9991 的回复:
是默认字节对齐的问题么?
32位是4位,64位是8位吧。。。应该会大点。

你全部改成pragma pack(1)看看。

这么改,要是代码在windows里还能无错误运行,那是奇迹
当初我就在这上面吃过苦头,编译无问题,普通运行无问题
但是一到某些点,就崩溃,查出的错误还是MFC内部的

#6


1、3、5楼说的都对

#7


引用 3 楼 xiaoyuanyuan2009 的回复:
我猜是这样的:
因为你32位系统的物理内存少,所以要有大部分的程序要缓存到硬盘上。当你把程序放在64位系统的时候,因为物理内存比较多,所以不需要把很多程序缓存到硬盘上,尽量把程序放在物理内存,所以64位比32位占用内存多


   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


同样的代码,32、64编译出来binary大小都不同。

#3


我猜是这样的:
因为你32位系统的物理内存少,所以要有大部分的程序要缓存到硬盘上。当你把程序放在64位系统的时候,因为物理内存比较多,所以不需要把很多程序缓存到硬盘上,尽量把程序放在物理内存,所以64位比32位占用内存多

#4


是默认字节对齐的问题么?
32位是4位,64位是8位吧。。。应该会大点。

你全部改成pragma pack(1)看看。

#5


引用 4 楼 tiger9991 的回复:
是默认字节对齐的问题么?
32位是4位,64位是8位吧。。。应该会大点。

你全部改成pragma pack(1)看看。

这么改,要是代码在windows里还能无错误运行,那是奇迹
当初我就在这上面吃过苦头,编译无问题,普通运行无问题
但是一到某些点,就崩溃,查出的错误还是MFC内部的

#6


1、3、5楼说的都对

#7


引用 3 楼 xiaoyuanyuan2009 的回复:
我猜是这样的:
因为你32位系统的物理内存少,所以要有大部分的程序要缓存到硬盘上。当你把程序放在64位系统的时候,因为物理内存比较多,所以不需要把很多程序缓存到硬盘上,尽量把程序放在物理内存,所以64位比32位占用内存多


   32位系统与64位系统因为地址长度不同,所以虚拟地址大小不同,与它们使用的物理内存大小无直接关系(只决定能使用的最大物理内存,如32位最大只能到4G,64位最大到2^64)。当然这就决定了,64位OS比32位能使用更多内存,但这并不能回答题主的问题:为什么会耗费更多内存。
  本人觉得应该是:1.地址长度-->命令集不同-->编译后bin变大(由于底层数据调取都与地址相关造成);
                                   2.地址空间变大-->内存页表变大
                                  3.系统复杂-->内核占的内存增多