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内存 ...
随机推荐
- ShareSDK For Unity集成
Mob ShareSDK Android - V2.7.10 iOS - V3.5.0 Mob下载:https://github.com/MobClub/New-Unity-For-ShareSDK ...
- RIG exploit kit:恶意活动分析报告——像大多数exploit kit一样,RIG会用被黑的网站和恶意广告进行流量分发
RIG exploit kit:恶意活动分析报告 from:https://www.freebuf.com/articles/web/110835.html 在过去的几周里,我们曾撰文讨论过Neutr ...
- 201671030107 胡文艳 实验十四 团队项目评审&课程项目总结
项目 内容 这个作业属于哪个课程 2016级计算机科学与工程学院软件工程(西北师范大学) 这个作业的要求在哪里 实验十四 团队项目评审&课程学习总结 作业学习目标 1.掌握软件项目评审会议流程 ...
- wordpress数字分页列表导航实现
前面我们用了自定义的方式来实现wordpress数字分页,其实wordpress是已经有集成了Numbered Pagination相关的函数,我们直接调用就可以.具体实现方法如下代码调用 <? ...
- Windows Automation API 3.0 Overview
https://www.codemag.com/article/0810042 While general accessibility requirements (such as font color ...
- router.beforeEach、路由元信息、导航守卫与函数式编程
一.函数的识别: 1.router.beforeEach:主函数.高阶函数.入口函数: 2.匿名参量函数:处理跳转过程中的附加逻辑 (to, from, next) => { if (to.ma ...
- bytes与网络通信
字符串是人机交互的符号: bytes是最接近计算机本身的信息表示方法. 网络通信是计算机与计算机之间的通信. 所有的通信信息,必须转化为bytes流的方式在计算机间传递. bytes与数据类型无关,与 ...
- VS 2015秘钥
专业版:HMGNV-WCYXV-X7G9W-YCX63-B98R2企业版:HM6NR-QXX7C-DFW2Y-8B82K-WTYJV
- RFM模型的变形LRFMC模型与K-means算法的有机结合
应用场景: 可以应用在不同行业的客户分类管理上,比如航空公司,传统的RFM模型不再适用,通过RFM模型的变形LRFMC模型实现客户价值分析:基于消费者数据的精细化营销 应用价值: LRFMC模型构建之 ...
- Comet OJ - Contest #15 题解
传送门 \(A\) 咕咕 const int N=1005; int a[N],n,T; int main(){ for(scanf("%d",&T);T;--T){ sc ...