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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/484486.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

长二F发射神十二飞船圆满成功!三名航天员飞向空间站天和核心舱

来源&#xff1a;中国航天科技集团文&#xff1a;陈立 刘岩编辑&#xff1a;杨成 高一鸣校对&#xff1a;林佳昕监制&#xff1a;索阿娣6月17日9时22分长征二号F运载火箭点火起飞中国航天员聂海胜、刘伯明、汤洪波乘坐神舟十二号载人飞船在“神箭”长二F托举下从酒泉卫星发射中…

codevs 3288 积木大赛

3288 积木大赛 &#xff08;2013年NOIP全国联赛提高组&#xff09; 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 春春幼儿园举办了一年一度的“积木大赛”。今年比赛的内容是搭建一座宽度为 n 的大厦&#xff0c;大厦可以看成由 n 块宽…

定义变量类型

typedef unsigned long DWORD; typedef int BOOL; typedef unsigned char BYTE; typedef unsigned short WORD; typedef float FLOAT; typedef void far *LPVOID; typedef int INT; typedef unsigned int UINT; 变量的“匈牙利表示法”&#xff1a; lp为前缀&#xff1a;指针类…

.net core中不支持GB2312编码的问题

今天在用core实现读取文件内容时出现了中文乱码的问题&#xff0c;特此记录下。代码如下&#xff1a;static void Main(string[] args){string path "F:\\1.txt";StreamReader sr new StreamReader(path, Encoding.Default);String line;while ((line sr.ReadLine…

java中Scanner类的使用

1.导入包 java.util.Scanner; 代码 import java.util.Scanner;&#xff08;不要忘记分号&#xff09; 2.创建Scanner对象 代码&#xff1a;Scanner inputnew Scanner(System.in); 3.创建变量接受输入 代码&#xff1a; int ainput.nextInt(); 显然&#xff0c;此代码只能输入一…

脑机融合技术的哲学审思

来源&#xff1a;《科学技术哲学研究》2020年第6期作者&#xff1a;张学义&#xff08;东南大学哲学与科学系&#xff09;潘平平&#xff08;华为南京所&#xff09;庄桂山&#xff08;东南大学成贤学院&#xff09;国家社科基金重大项目“问题哲学理论前沿与理论创新研究”(18…

“哪里有人喜欢孤独,不过是害怕失望罢了”———村上春树《东尼泷谷》观后感...

每个人发自内心的感受&#xff0c;都是孤独的&#xff0c;哪怕表面多么欢快。 ——By 浪漫Chopin 配乐&#xff1a; http://music.163.com/song/498210/?userid539620943 东尼的一生都是孤独的&#xff0c;生下来父亲带他到处流浪&#xff0c;对他不管不问。 他自己做饭&…

windows定时计划备份MySql

使用 MySql 的 mysqldump 将数据库文件备份成 sql 文件。 Windows下备份 本地的数据库环境 MySql 安装环境&#xff1a;C:\MySql 数据库名称&#xff1a;bbs root root 数据库备份目的地&#xff1a; D:/Data_BackUp echo off set "Ymd%date:~,4%%date:~5,2%%date:~8,2%&q…

“新一代城市大脑建设与发展“专家研讨会

2021年6月城市大脑全球标准研究组成员在国家级核心期刊发表论文&#xff08;6月末出版&#xff09;&#xff0c;阐述了关于城市大脑的最新进展&#xff0c;基于城市大脑全球标准研究&#xff0c;形成新一代城市大脑的“1N”模式建设方案和九个实施步骤&#xff1b;突出了直接应…

进程的控制——获取系统进程信息

获取系统进程 ToolHelp函数&#xff1b;CreateToolhelp32Snapshot函数获取当前系统内执行的进程拍快照&#xff08;Snapshot&#xff09;&#xff0c;即获得进程列表&#xff1b;Process32First函数和Process32Next函数遍历列表&#xff1b;快照头文件&#xff1a;#include<…

PHP随笔---简述var_dump()、print_r()、echo()

var_dump() 能打印出类型 print_r() 只能打出值 echo() 是正常输出… 需要精确调试的时候用 var_dump(); 一般查看的时候用 print_r() 另外 &#xff0c; echo不能显示数组 其余2个可以…

Science: 四万张大脑图像首次揭示人脑白质的基因基础

来源&#xff1a;青牛帮脑白质&#xff0c;是大脑内部神经纤维聚集的地方&#xff0c;由于其区域比细胞体聚集的大脑表层颜色浅&#xff0c;故名脑白质。人到了大约二十岁时&#xff0c;白质才会在不同脑区逐渐发育完全&#xff0c;而其生长的时机与成熟程度&#xff0c;会影响…

PHP 中错误控制符@

HP中提供了一个错误控制运算符“”&#xff0c;对于一些可能会在运行过程中出错的表达式时&#xff0c;我们不希望出错的时候给客户显示错误信息&#xff0c;这样对用户不友好。于是&#xff0c;可以将放置在一个PHP表达式之前&#xff0c;该表达式可能产生的任何错误信息都被忽…

tensorflow框架

基于Tensorflow的NN&#xff1a;用张量表示数据&#xff0c;用计算图搭建神经网络&#xff0c;用会话执行计算图&#xff0c;优化线上的权重&#xff08;参数&#xff09;&#xff0c;得到模型。 张量&#xff08;tensor&#xff09;:多维数组&#xff08;列表&#xff09; …

IMT-2030(6G)推进组发布《6G总体愿景与潜在关键技术》白皮书

来源&#xff1a;中国信通院CATCT编辑&#xff1a;蒲蒲当前&#xff0c;新一轮科技革命和产业变革突飞猛进&#xff0c;随着5G商用的大规模部署&#xff0c;全球业界已开启对下一代移动通信&#xff08;6G&#xff09;的探索研究。日前&#xff0c;IMT-2030(6G)推进组&#xff…

Win32程序执行单元-多线程

多线程&#xff1a;主线程在运行过程中&#xff0c;可以创建新的线程&#xff0c;这些线程可以共享进程的资源&#xff0c;如全局变量&#xff0c;句柄等&#xff1b;线程函数定义&#xff1a;DWORD WINAPI ThreadProcess(LPVOID lpParam); WINAPI 宏名&#xff0c;在windef.h有…

PHP中foreach遍历循环的使用(两种用法)

foreach在循环遍历数组时是很便利的&#xff0c;PHP提供了两种方法&#xff1a;1. 输出不显下标 2.输出显示下标 (注意&#xff1a; foreach不支持消除错误信息) 题目如图 输出不显下标&#xff1a; foreach($ students as $key) { echo " $key"."< br/>…

【博客园2018总结帖】21天,在Github上获取 6300 star

大家好&#xff0c;我是程序员小吴。12月初我在GitHub上上传了一个仓库&#xff0c;到现在为止获取了 6300 star&#xff0c;下面和大家聊聊关于项目启动的初衷、面临的一些困难和未来的计划。 「LeetcodeAnimation」的萌芽&#xff1f; 在刷Leetcode的过程中&#xff0c;遇到很…

多线程-线程同步

CreateThread函数与_beginthreadex 函数的联合使用&#xff1a; 为了多线程同步的需要&#xff0c;使每个线程必须具有唯一的状态&#xff0c;CreateThread还不能灵活使用&#xff0c;需要使用C/C运行期库&#xff1b;CreateThread函数参数与_beginthreadex函数对应的&#xff…

最强原创综述!当强化学习邂逅组合优化

『运筹OR帷幄』转载来源&#xff1a;运筹OR帷幄作者&#xff1a;黄含驰未来智能实验室的主要工作包括&#xff1a;建立AI智能系统智商评测体系&#xff0c;开展世界人工智能智商评测&#xff1b;开展互联网&#xff08;城市&#xff09;云脑研究计划&#xff0c;构建互联网&…