C++内存管理1-64位系统运行32位软件会占用更多的内存吗?
随着大容量内存成为电脑平台常规化的配置,在配置组装机时很多的用户都会选择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位软件会占用更多的内存吗?的更多相关文章
- 64位系统运行32位Oracle程序解决方案
Attempt to load Oracle client libraries threw BadImageFormatException. This problem will occur when ...
- 64位Ubuntu运行32位程序时报文件不存在(No such file or Directory)的一种解决办法
尝试在64位Ubuntu下面运行32位程序时, 一直说 文件不存在(No such file or directory), 我只想说++. 你tm说个文件格式不正确不就好了? 非得说个文件不存在! 真 ...
- 64位win8.1系统 运行 32位程序,文件夹路径是中文遇到问题
今天有一位用户向我反应软件使用遇到问题. 用户使用的是64位win8.1系统,之前有很多用户使用64位的win8.1系统没遇到过问题. 远程协助了一下,差不多15分钟我试了几个办法没解决问题. 最后我 ...
- ubuntu 12.04 LTS 64位兼容运行32位程序
安装完Goagent,运行的时候出现了问题,在网络上翻看一些关于ubuntu的文档时,突然记起自己安装的是64位版,而goagent应该是32位的,于是通过sudo apt-get install i ...
- 64位系统上32位进程拷贝文件到System32目录时的重定向
64位系统上,32位进程拷贝文件到"System32"目录时,会被文件系统重定向到"SysWOW64"目录 要禁用这种重定向,需要用到下面2个API: Wow6 ...
- 如何在ubuntu14.04(64位)编译运行32位程序
sudo -i cd /etc/apt/sources.list.d echo "deb http://archive.ubuntu.com/ubuntu/ raring main rest ...
- <linux系统c语言生成.so文件,生成64位可执行文件,在64位系统中运行32位的可执行文件>
1.linux 系统c语言生成.o文件,---->gcc -m64 -c -fPIC test.c -o test.o2.linux 系统c语言生成.so文件,----->gcc -sha ...
- 64位系统上运行32位程序能否申请到8G内存?
申请不到,因为64为系统在运行32位程序的时候只是为了向下兼容而已,对于32位程序来讲,申请8G的存储空间没有任何意义,因为32位的程序最大寻址空间只有4G,32位程序在编译之后的机器代码也只有32位 ...
- 你必须了解的java内存管理机制(一)-运行时数据区
前言 本打算花一篇文章来聊聊JVM内存管理机制,结果发现越扯越多,于是分了四遍文章(文章讲解JVM以Hotspot虚拟机为例,jdk版本为1.8),本文为其中第一篇.from 你必须了解的java内存 ...
随机推荐
- 洛谷P3069 [USACO13JAN]牛的阵容Cow Lineup(尺取法)
思路 考虑比较朴素的解法,枚举每个长度为\(k+1\)的区间,然后统计区间中出现次数最多的颜色.这样的话复杂度为\(O(n*k)\)的,显然不行. 观察到统计每个区间中出现次数最多的颜色中,可以只用看 ...
- 网络测试工具--Iperf、Netperf 、MZ
网络性能测量的五项指标 可用性(availability) 响应时间(response time) 网络利用率(network utilization) 网络吞吐量(network throughpu ...
- http 和 https(通俗原理了解)
超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息,HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂 ...
- 2019阿里JVM组实习面经
面试质量非常高....非常高...高... 一面 自我介绍 看过hotspot哪些模块,模板解释器工作说一下,生成的native code放在哪,怎么处理safepoint的 说项目,实现了哪些字节码 ...
- Codeforces Round #558 (Div. 2)-Cat Party (Hard Edition)-(前缀和 + 模拟)
http://codeforces.com/problemset/problem/1163/B2 题意:有n天,每天有一个颜色,截取前x天,随便抽掉一天,使剩下的各个颜色出现的次数相等. 解题,也可以 ...
- 015_matlab运行C语言
视频教程:https://v.qq.com/x/page/q3039wsuged.html 资料下载:https://download.csdn.net/download/xiaoguoge11/12 ...
- MongoDB shell 1 数据库方法
方法名 描述 db.cloneDatabase() 从指定主机上克隆数据库 db.currentOp() 显示当前正在进行的操作 db.commandHelp() 返回数据库命令的帮助信息 db.cr ...
- strings命令(转)
以前我用strings命令的频率不高, 现在越用越顺手, 而且已经是离不开strings命令了.虽然以前说过strings命令, 但今天还是要说. 主要是两大用途, 下面来说明一下: 一. 确认代码编 ...
- 用于C# 的异步,持久的键值存储 Akavache 使用
Akavache是一个异步的,持久的(即写入磁盘)键值存储,用于在C#中编写桌面和移动应用程序,基于SQLite3.Akavache非常适合存储重要数据(即用户设置)以及过期的缓存本地数据. 开源 ...
- CSS的初步学习
CSS的作用: 被用来格式化HTML文档 插入样式的方法: 外部样式表 目的: 适合格式化多个页面,减少工程量. 用法: 每个html页面使用标签(在页面头部)链接到样式表中,代码如下: <he ...

