64位系统下一个32位的程序究竟可以申请到多少内存?

cpu的位是指一次性可处理的数据量是多少,1字节=8位,32位处理器可以一次性处理4个字节的数据量,依次类推。32位操作系统针对的32位的CPU设计。64位操作系统针对的64位的CPU设计。操作系统只是硬件和应用软件中间的一个平台。我们的CPU从原来的8位,16位,到现在的32位和64位。

背景:

电脑的内存是8GB,装的是32位的Win 7 32位版本,系统认出的内存是3.5GB,应该说是4GB,因为还有0.5GB内存分配给了显存。笔者购置单条8GB竟然被瞬间阉割了4GB。为了物尽其用以及尝鲜系统,又在另外一个分区上安装了Win 8的64位版。

Win 7(X86)下的内存状况:

Win 8(X64)下的内存状况:

问题:

在满足的看着8G内存全部启用以及体验Win 8 Metro华丽的界面后,脑海里突然飘出一个问题:64位系统下8G内存是否完全能为32位的程序所用。

实验环境:

Windows 7 ultimate(x86)

Windows 8 Professional(X64)

Visual Studio 2010 C++ 编译一个32位程序控制台应用程序,以GB为单位向系统申请内存,以32位方式编译。

主函数代码:

// CPP_MemoryStudy.cpp : Defines the entry point for the console application.

#include "stdafx.h"

#include <iostream>

using namespace std;

int _tmain(int argc, _TCHAR* argv[])

{

int a = 5;

int MEM_SIZE = 0;

const int GIGABTYE = 1024*1024*1024*sizeof(char); #1GB 内存

int *p = NULL;

cout<<"Please input how many GB memoroy you want allocate:"<<endl;

cin>>MEM_SIZE;

p = (int *)malloc(GIGABTYE*MEM_SIZE);

if(NULL == p)

{

cout<<"Allocate Memory Error"<<endl;

}

else

{

cout<<"Succeed Allocate Memory"<<endl;

}

getchar();

getchar();

return 0;

}

程序界面:

Win 7下运行(测试申请1GB内存:OK

Win 8下运行(测试申请1 GB内存:OK

Win 8下运行(单进程测试申请3 GB内存(总内存已 > 4GB):FAIL

Win 8 下(多32位进程在64位系统下申请内存>4GBOK

结论:

  1. 从初步实验结果来看一个32位的程序在64位的环境下不具备使用4GB+内存的能力。
  2. 多个32位程序可以申请超过4GB的内存。

还有一个有趣的现象,当我申请内存大于4GB的时候,有的时候会显示内存显示成功,但是资源管理器里面没有更新,证明本质还是没有成功,是保护的原因还是其他的原因还需要深究,这将作为下一章节的题材。

64位系统对于常年运行32位程序的用户的意义只是有可以运行更多地单个32位程序的能力,32位的程序在64位系统下依然不具有寻址4GB+的能力。

通俗点说,就是扩大仓库的容量,让其可以放下更多货物。

后续研究思路:

  1. 将上述程序在64位环境下重新编译,研究内存使用情况。
  2. Linux Ubuntu 32位系统可以支持8GB内存,我会实验一下单个程序的寻址能力。
  3. 那些号称支持64GB RAM的32位服务器系统,如Windows Server等,就竟单个程序可以使用到多少内存。

以上是笔者一些肤浅的理解,尚待更多的研究论证,我会继续跟进这个话题也欢迎您加入这个话题的讨论。

【转载】https://www.cnblogs.com/Leo_wl/p/3154072.html

64位系统下一个32位的程序究竟可以申请到多少内存?相关推荐

  1. 你为什么需要在64位系统下用32位程序

    在64位系统下,用64位的程序自然是能够充分利用cpu中的64位指令和64位的地址空间,可有的时候,我们却不得不在64位系统下使用32位的程序. 64位和32位 对于64位还是32位,首先要从概念上把 ...

  2. 64位系统下用32位程序

    在64位系统下,用64位的程序自然是能够充分利用cpu中的64位指令和64位的地址空间,可有的时候,我们却不得不在64位系统下使用32位的程序. 64位和32位 对于64位还是32位,首先要从概念上把 ...

  3. win7 64位连接oracle11g,win7 64位系统下使用32位PLSQL连接64位Oracle 11g

    前提条件:已安装Oracle 11g 已安装32位PLSQL 需下载:instantclient-basic-win32-10.2.0.5(官网有,当然你也可以下载其他版本的) 一:将instantc ...

  4. ARM 64位系统下编译32位程序

    环境配置信息 dpkg --add-architecture armhf apt-get update apt-get install libc6:armhf libstdc++6:armhf apt ...

  5. Linux下的32位C程序,linux系统c语言生成.so文件,生成64位可执行文件,在64位系统中运行32位的可执行文件...

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

  6. 64位操作系统(WIN10)+32位LabVIEW(2020)+64位MySQL,Windows10系统下用32位ODBC连接MySQL

    1.首先得安装"Connector/ODBC",就是MySQL的ODBC驱动,这个是与应用程序相关的,而不是与操作系统相关的,也就是说,不管你的系统是X64还是X86,只要你的应用 ...

  7. 在64位linux下编译32位程序

    一般情况下我们最好是在一个平台上编译本平台的二进制程序,比如在32位平台上编译32位程序而在64位平台上编译64位程序. 现在64位的系统(这里主要指x86_64系统,包括AMD64和Intel的EM ...

  8. PL/SQL Developer 在windows7 64位系统下连Oaracle11g64位系统的解决经验

    PL/SQL Developer 在windows7 64位系统下连Oaracle11g64位系统的解决经验 一.问题现象及解决方法 现象: 1.PL/SQL 无法登录64位数据库 2.在PL/SQL ...

  9. 64位系统上运行32位程序的内存限制

    64位系统上运行32位程序能否申请到8G内存? 收藏到手机    转发   评论 2010-01-20 10:56 申请不到,因为64为系统在运行32位程序的时候只是为了向下兼容而已,对于32位程序来 ...

最新文章

  1. MaterialImageView
  2. 【数据结构与算法】之深入解析“打家劫舍II”的求解思路与算法示例
  3. 18.requests
  4. Haproxy负载均衡详解,与keepalived的搭配
  5. vue如何集成阿里云视频服务组件(aliplayer)视频功能是使用el-dialog 弹出aliplayer播放
  6. 关于计算机审计建议,商业银行计算机审计存在问题与建议
  7. Project:解决问题:在Microsoft project2016中如何编辑一周七天工作日
  8. 有什么免费的思维导图软件可以推荐?
  9. Using a password on the command line interface can be insecure.
  10. 石墨烯的加入,新量子装置使人类离第二次量子革命真正又近一步
  11. 4. 存储过程 · sql编程
  12. 交通大学c语言作业,交通大学C语言第二次作业说课讲解.docx
  13. 帝国CMS教程:如何制作手机网站
  14. JavaScript函数式编程之副作用
  15. 类select下拉:多选+搜索
  16. ACM MM 2022 | 浙大提出BiSMAP:语义分割UDA 新SOTA!
  17. 计算机科学导论挂了,山东高校曝民间版挂科率排行榜 高等代数挂的人最多
  18. 《Python编程从入门到实践 第2版》 最强入门Python书籍
  19. 在C#中根据HardwareID获取驱动程序信息
  20. 首届世界围棋混双赛,女棋手着装点评

热门文章

  1. 下面这些是什么意思:@classmethod, @staticmethod, @property?
  2. LeetCode--283--移动0
  3. 从Iris数据集开始---机器学习入门
  4. 把excel每一行中的数据输出为一个txt文档的VBA函数
  5. python模块之random模块
  6. GCC 命令行具体解释
  7. php 中PHP_EOL使用
  8. VMWare虚拟机空间扩展
  9. 从虚拟主机时代说起,详述Kubernetes带来的变革
  10. linux 读写权限