64位系统下,一个32位的程序究竟可以申请到多少内存,4GB还是更多
前言:
- 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位方式编译
- 主函数代码:
1 // CPP_MemoryStudy.cpp : Defines the entry point for the console application. 2 // 3 4 #include "stdafx.h" 5 #include <iostream> 6 using namespace std; 7 8 int _tmain(int argc, _TCHAR* argv[]) 9 {10 int a = 5;11 int MEM_SIZE = 0;12 const int GIGABTYE = 1024*1024*1024*sizeof(char); #1GB 内存13 int *p = NULL;14 cout<<"Please input how many GB memoroy you want allocate:"<<endl;15 cin>>MEM_SIZE;16 p = (int *)malloc(GIGABTYE*MEM_SIZE);17 if(NULL == p)18 {19 cout<<"Allocate Memory Error"<<endl;20 }21 else22 {23 cout<<"Succeed Allocate Memory"<<endl;24 }25 getchar();26 getchar();27 return 0;28 }
- 程序界面
- Win 7下运行(测试申请1GB内存 OK)
- Win 8下运行(测试申请1 GB内存 OK)
- Win 8下运行(单进程测试申请3 GB内存(总内存已 > 4GB) FAIL)
- Win 8 下(多32位进程在64位系统下申请内存>4GB OK)-- 这个点子是在和好友讨论的时候想到的,测试了一下竟然可以
结论:
- 从初步实验结果来看一个32位的程序在64位的环境下不具备使用4GB+内存的能力。
- 多个32位程序可以申请超过4GB的内存,
- 还有一个有趣的现象,当我申请内存大于4GB的时候,有的时候会显示内存显示成功,但是资源管理器里面没有更新,证明本质还是没有成功,是保护的原因还是其他的原因还需要深究,这将作为下一章节的题材。
- 64位系统对于常年运行32位程序的用户的意义只是有可以运行更多地单个32位程序的能力,32位的程序在64位系统下依然不具有寻址4GB+的能力
- 通俗点说,就是扩大仓库的容量,让其可以放下更多货物
后续研究思路:
- 将上述程序在64位环境下重新编译,研究内存使用情况
- 那些号称支持64GB RAM的32位服务器系统,如Windows Server等,就竟单个程序可以使用到多少内存
以上是笔者一些肤浅的理解,尚待更多的研究论证,我会继续跟进这个话题也欢迎您加入这个话题的讨论。
再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://www.cnblogs.com/captainbed
转载于:https://www.cnblogs.com/skiwnchiwns/p/10184312.html
64位系统下,一个32位的程序究竟可以申请到多少内存,4GB还是更多相关推荐
- 64位系统下一个32位的程序究竟可以申请到多少内存?
64位系统下一个32位的程序究竟可以申请到多少内存? cpu的位是指一次性可处理的数据量是多少,1字节=8位,32位处理器可以一次性处理4个字节的数据量,依次类推.32位操作系统针对的32位的CPU设 ...
- 你为什么需要在64位系统下用32位程序
在64位系统下,用64位的程序自然是能够充分利用cpu中的64位指令和64位的地址空间,可有的时候,我们却不得不在64位系统下使用32位的程序. 64位和32位 对于64位还是32位,首先要从概念上把 ...
- 64位系统下用32位程序
在64位系统下,用64位的程序自然是能够充分利用cpu中的64位指令和64位的地址空间,可有的时候,我们却不得不在64位系统下使用32位的程序. 64位和32位 对于64位还是32位,首先要从概念上把 ...
- win7 64位连接oracle11g,win7 64位系统下使用32位PLSQL连接64位Oracle 11g
前提条件:已安装Oracle 11g 已安装32位PLSQL 需下载:instantclient-basic-win32-10.2.0.5(官网有,当然你也可以下载其他版本的) 一:将instantc ...
- ARM 64位系统下编译32位程序
环境配置信息 dpkg --add-architecture armhf apt-get update apt-get install libc6:armhf libstdc++6:armhf apt ...
- 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 ...
- 64位操作系统(WIN10)+32位LabVIEW(2020)+64位MySQL,Windows10系统下用32位ODBC连接MySQL
1.首先得安装"Connector/ODBC",就是MySQL的ODBC驱动,这个是与应用程序相关的,而不是与操作系统相关的,也就是说,不管你的系统是X64还是X86,只要你的应用 ...
- 在64位linux下编译32位程序
一般情况下我们最好是在一个平台上编译本平台的二进制程序,比如在32位平台上编译32位程序而在64位平台上编译64位程序. 现在64位的系统(这里主要指x86_64系统,包括AMD64和Intel的EM ...
- PL/SQL Developer 在windows7 64位系统下连Oaracle11g64位系统的解决经验
PL/SQL Developer 在windows7 64位系统下连Oaracle11g64位系统的解决经验 一.问题现象及解决方法 现象: 1.PL/SQL 无法登录64位数据库 2.在PL/SQL ...
- 64位系统上运行32位程序的内存限制
64位系统上运行32位程序能否申请到8G内存? 收藏到手机 转发 评论 2010-01-20 10:56 申请不到,因为64为系统在运行32位程序的时候只是为了向下兼容而已,对于32位程序来 ...
最新文章
- HDU - 3333 Turing Tree 线段树区间不同值和+详解+思想
- 基于Delphi的Socket I/O模型全接触
- python格式规范的要求_python模块规定的格式,按照这样写,最规范
- Acronis Disk Director Suite(windows7分区工具)
- Web Hacking 101 中文版 十七、服务端请求伪造
- android聚焦时如何给控件加边框,edittext设置获得焦点时的边框颜色
- 校招刷题---java选择题笔记02
- [机器学习1]线性回归
- cocos+kbe问题记录
- 阿里ICON图标,使用教程
- Word 2016封面不显示页码
- 《烈烈先秦》8、独撑大厦的真勇者——半残战神李牧
- 库存控制系统(inventory control system)
- 多功能Python键盘记录工具Radium
- 奋斗吧,程序员——第三十章 多情自古伤离别,更哪堪冷落清秋节
- 今日学习在线编程题:竹鼠的白色季节
- ARM交叉编译工具链分类说明
- Java 12 来了,我们应该采用嘛?
- 基于Linux搭建Web网站
- Hadoop的完全分布式搭建
热门文章
- 数据结构链表之队列,Python3实现——7
- 二、uniapp项目(分段器的使用、scroll-view、视频下载、转发)
- 十三、CSS 3新特性详解(一)——属性、结构伪类、伪元素选择器,nth-child与nth-of-type区别,2D rotate,calc函数、滤镜filter、过渡transition
- 通过Cisco packet Tracer 划分vlan实现不同交换机间pc进行通信
- LeetCode 2087. 网格图中机器人回家的最小代价(脑筋急转弯)
- LeetCode 1224. 最大相等频率(哈希)
- LeetCode 576. 出界的路径数(动态规划)
- LeetCode 358. K 距离间隔重排字符串(贪心+优先队列)
- 怎样从php转向java_Github标星10.8K!Java 实战博客项目分享
- 线程间通信的几种方法_并发编程中的线程间通信