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

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

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

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

  所以我们首先要知道什么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位功能处理。

  (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在运行时需要在所有的三个过程中寻找有效的内存使用量的所有程序。而测试方式是开启计算器、打开一个3、7MB的.xls文件和一个3.9MB的.PPTX文件时所占用的内存使用状况。

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

endl;

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

  1. 64位系统运行32位Oracle程序解决方案

    Attempt to load Oracle client libraries threw BadImageFormatException. This problem will occur when ...

  2. 64位Ubuntu运行32位程序时报文件不存在(No such file or Directory)的一种解决办法

    尝试在64位Ubuntu下面运行32位程序时, 一直说 文件不存在(No such file or directory), 我只想说++. 你tm说个文件格式不正确不就好了? 非得说个文件不存在! 真 ...

  3. 64位win8.1系统 运行 32位程序,文件夹路径是中文遇到问题

    今天有一位用户向我反应软件使用遇到问题. 用户使用的是64位win8.1系统,之前有很多用户使用64位的win8.1系统没遇到过问题. 远程协助了一下,差不多15分钟我试了几个办法没解决问题. 最后我 ...

  4. ubuntu 12.04 LTS 64位兼容运行32位程序

    安装完Goagent,运行的时候出现了问题,在网络上翻看一些关于ubuntu的文档时,突然记起自己安装的是64位版,而goagent应该是32位的,于是通过sudo apt-get install i ...

  5. 64位系统上32位进程拷贝文件到System32目录时的重定向

    64位系统上,32位进程拷贝文件到"System32"目录时,会被文件系统重定向到"SysWOW64"目录 要禁用这种重定向,需要用到下面2个API: Wow6 ...

  6. 如何在ubuntu14.04(64位)编译运行32位程序

    sudo -i cd /etc/apt/sources.list.d echo "deb http://archive.ubuntu.com/ubuntu/ raring main rest ...

  7. <linux系统c语言生成.so文件,生成64位可执行文件,在64位系统中运行32位的可执行文件>

    1.linux 系统c语言生成.o文件,---->gcc -m64 -c -fPIC test.c -o test.o2.linux 系统c语言生成.so文件,----->gcc -sha ...

  8. 64位系统上运行32位程序能否申请到8G内存?

    申请不到,因为64为系统在运行32位程序的时候只是为了向下兼容而已,对于32位程序来讲,申请8G的存储空间没有任何意义,因为32位的程序最大寻址空间只有4G,32位程序在编译之后的机器代码也只有32位 ...

  9. 你必须了解的java内存管理机制(一)-运行时数据区

    前言 本打算花一篇文章来聊聊JVM内存管理机制,结果发现越扯越多,于是分了四遍文章(文章讲解JVM以Hotspot虚拟机为例,jdk版本为1.8),本文为其中第一篇.from 你必须了解的java内存 ...

随机推荐

  1. C++学习(4)——通讯录管理程序

    复习简单操作,实现一个非常非常简单的通讯录管理小程序 #include <iostream> using namespace std; #include <string> co ...

  2. python小案例-计算输入两个数的最大公约数与最小公倍数

    # 计算最大公约数 def gcd(x,y): """ 计算最大公约数 :param x:一个正整数 :param y:一个正整数 :return:x,y的最大公约数 & ...

  3. spark的RDDAPI总结

    下面是RDD的基础操作API介绍: 操作类型 函数名 作用 转化操作 map() 参数是函数,函数应用于RDD每一个元素,返回值是新的RDD flatMap() 参数是函数,函数应用于RDD每一个元素 ...

  4. 虚拟机将ip修改为静态

  5. POJ3616-Milking Time-(dp)

    题意:牛有m个时间段可以挤奶,每个时间段的开始时间,结束时间,挤奶量不尽相同,寄完一次需要休息r时间,求在n时间内如何安排牛挤奶产量最大. 解题: 1.休息r时间,当做结束时间需要+r 2.以结束时间 ...

  6. score indicator

    The strongest scorer applet is the strongest scorer specially designed for the players. No longer wo ...

  7. haproxy 2.0 dataplaneapi rest api 几个方便的问题排查接口

    在使用haproxy 2.0 dataplaneapi的时候,刚开始的时候我们可能需要进行调试,保证我们的配置在我们的系统环境中 是可以使用的,以下是自己在当前学习中为了排查问题会使用的几个api 创 ...

  8. CCF 201909-3 字符画

    CCF 201909-3 字符画 题意: 将n * m的RGB图片压缩成q * p的块,每块为该原像素的平均值,我们暂且称之为像素块(代码注释为字符块) . 输入n行m列的RGB图片: 第一行:图片的 ...

  9. 使用charles对jmeter进行抓包

  10. nginx 访问控制之 request_uri

    $request_uri比$docuemnt_uri多了请求的参数. 主要用来针对请求的uri中的参数进行控制. 示例: if ($request_uri ~ "gid=\d{9,12}&q ...