C++内存管理1-64位系统运行32位软件会占用更多的内存吗?

 

  随着大容量内存成为电脑平台常规化的配置,在配置组装机时不少的用户都会选择8GB甚至是16GB的容量规格内存使用在本身的机器上,若是要将这8GB甚至是16GB的内容在系统使用时能充分利用起来的话,你平台必须使用64位的操做系统做为支持。api

  但值得注意的是虽然64位系统已经在近几年成为主流,但很多的软件或者很多的用户在使用电脑时运行的软件仍为32位版本,这引起了一个有趣的问题。你须要更多或更少的内存来让32位应用程序运行在64位版本的Windows?而且还有一个传言是说“在64位系统运行32位应用程序所耗费的内存相比32位系统运行32位应用程序要高出1.5倍的需求”函数

  最近国外媒体就针对这一状况经过测试来验证是否在64位系统运行32位应用程序所耗费的内存相比32位系统运行32位应用程序要高这一选题是否真的成立。测试

  首先咱们要了解一下在64位系统里面32位程序是怎样执行的?在一个64位系统里面当不采用任何兼容支持辅助是没法让32位程序实现运行的,毕竟32位程序对比64位程序在系统指针数据类型以系统调用指令,是不一样的。spa

  因此咱们首先要知道什么32位程序进程在64位系统上起到做用。操作系统

  

 

   注意:在64位操做系统上,Windows使用了WoW64子系统它有效地实现一个32位Windows的x64系统仿真器和基于Itanium(IA64)系统仿真器指针

  IA64系统是一个由处理器指令和不一样的内存页面大小(x86和x64为4K,IA64为8K)组成,因为x64处理器具备x86处理器的全部的指令且使用相同的存储器页大小。在这两种状况下,提供了WoW64 64位的Windows内核32位版本的ntdll.dll之间的通讯界面,以便他们能够经过Windows内核提供的原生64位功能处理。blog

  (ntdll是WindowNT操做系统原型中的库)(即,经过WoW64子系统,能够为32位程序提供64位系统相应的工程处理接口

下图是:32bit 的程序在64位操做系统中所依赖的模块,其中都是从系统文件SysWOW64中提供的相应的32bit的库dll进程

 

 

 

  用于x64和IA64系统实现需求三个DLL文件,分别为wow64cpu.dll, wow64win.dll, and wow64.dll。他们的功能是在Win32k.sys中提供了Windows功能和部分包含执行、内核、内存管理、进程调度程序和其余的操做系统核心要素内存

  一个thunk是一个子程序,它容许一个程序在系统中执行一个共同的子程序或函数。在这种状况下,它提取从32位程序调用堆栈的参数,将它们转换成它们的64位同行,并使得64位系统调用在从调用返回时,将64位的结果返回给32位转换并推到程序的调用堆栈调用者使用

  

 此外还要须要注意其余一些重要的差别

  IA64系统使用两个附加文件:IA32exec.bin是x86软件模拟器Wowia32x.dll提供了WoW64与软件模拟器之间的接口

  一个32位程序的过程当中会加载这些文件,而在64位版本的ntdll.dll中都是能够被加载到另一个DLL,apisetschema.dll,而在Windows 7和更高版本的32位进程,这将被加载到全部进程中惟一的64位二进制文件。

  当一个32位程序开始,它将加载wow64.dll依次加载ntdll.dll 32位版本和%SystemRoot% \ Syswow64任何须要的32位DLL。这些文件大多数是在32位系统中的相同的二进制文件,可是在WOW64有些已被重写修改

  测试的方式经过虚拟机运行两组Windows 7旗舰版本,分别为64位系统和32位系统各一个而且使用相同的彻底安装以及系统补丁安装,每一个系统分配2GB的内存。禁用双方的交换文件以得到更好的画面内存 确保内存没法调出到磁盘的使用状况。

  经过Sysinternals Process Explore来收集系统运行时工做集以及WindowSystem的使用情况,这些工做组数字反映了程序所使用的内存数量。它更复杂的是即便它们已被另外一个进程加载也能经过其反映出共享库所使用的内存量。测试监测以LibreOffice程序soffice.exe,soffice.bin在运行时须要在全部的三个过程当中寻找有效的内存使用量的全部程序。而测试方式是开启计算器、打开一个三、7MB的.xls文件和一个3.9MB的.PPTX文件时所占用的内存使用情况

 

 

   通过一系列的对比是对比32位系统与64位系统在内存占用差别上不超过9.9%,而在一些同类型的测试中也得到了相相似的测试结果,甚至64位系统的最终使用比32位系统的内存更少。因此,64位版本的Windows的须要比他们的32位运行更多的RAM运行32位应用程序时?通常状况下,是的。可是,你须要升级内存?可能不会,并且运行需求并无1.5倍的使用差别。

 

 

endl;

相关文章
相关标签/搜索