64位系统下,一个32位的程序究竟可以申请到多少内存,4GB还是更多?(一)
2013-06-24 22:45
489 查看
前言:
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内存 [b]OK)[/b]
Win 8下运行(测试申请1 GB内存 OK)
[b]Win 8下运行(单进程测试申请3 GB内存(总内存已 > 4GB) FAIL)[/b]
[b]
[/b]
Win 8 下(多32位进程在64位系统下申请内存>4GB OK)-- 这个点子是在和好友讨论的时候想到的,测试了一下竟然可以
结论:
从初步实验结果来看一个32位的程序在64位的环境下不具备使用4GB+内存的能力。多个32位程序可以申请超过4GB的内存,
还有一个有趣的现象,当我申请内存大于4GB的时候,有的时候会显示内存显示成功,但是资源管理器里面没有更新,证明本质还是没有成功,是保护的原因还是其他的原因还需要深究,这将作为下一章节的题材。
64位系统对于常年运行32位程序的用户的意义只是有可以运行更多地单个32位程序的能力,32位的程序在64位系统下依然不具有寻址4GB+的能力
通俗点说,就是扩大仓库的容量,让其可以放下更多货物
后续研究思路:
将上述程序在64位环境下重新编译,研究内存使用情况Linux Ubuntu 32位系统可以支持8GB内存,我会实验一下单个程序的寻址能力。
那些号称支持64GB RAM的32位服务器系统,如Windows Server等,就竟单个程序可以使用到多少内存
以上是笔者一些肤浅的理解,尚待更多的研究论证,我会继续跟进这个话题也欢迎您加入这个话题的讨论。
相关文章推荐
- 64位系统下,一个32位的程序究竟可以申请到多少内存,4GB还是更多?
- 64位系统上运行32位程序能否申请到8G内存?
- 究竟可以申请到多少内存
- win764位系统上让32位程序能申请到4GB内存方法。
- 64位的系统可以让IIS在32位的环境下运行asp.net程序(转)
- linux下,一个运行中的程序,究竟占用了多少内存?
- 如何判断个人电脑是多少位(32位?还是64位系统)
- 16位平台、32位平台、64位平台下char、short、int、long、指针 分别占多少字节,操作系统可以使用的最大内存空间
- 获取64位32位系统内存剩余多少
- 32 位模式下 C/C++ 程序到底可以用多少内存
- android获取应用程序判断是系统程序还是应用程序并且判断在sd卡中还是内存中
- VC程序里判断系统是64位还是32位的正确方法
- linux下,一个运行中的程序,究竟占用了多少内存?
- 64位系统上运行32位程序的内存限制
- VC程序里判断系统是64位还是32位的正确方法
- VC程序里判断系统是64位还是32位的正确方法
- linux下,一个运行中的程序,究竟占用了多少内存?
- 【分享】如何判断个人电脑是多少位(32位?还是64位系统)
- 究竟选择32位还是64位Linux系统?
- VC程序里判断系统是64位还是32位的正确方法.