} } }

    64位体系下,一个32位的法度毕竟可以申请到几许内存,4GB还是更多?(一)

    添加时间:2013-6-25 点击量:

    媒介:


    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 = 102410241024sizeofchar); #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(GIGABTYEMEM_SIZE);
        17 if(NULL == p)
        18 {
        19 cout<<Allocate Memory Error<<endl;
        20 }
        21 else
        22 {
        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位景象下从头编译,研究内存应用景象

    • Linux Ubuntu 32位体系可以支撑8GB内存,我会实验一下单个法度的寻址才能。

    • 那些号称支撑64GB RAM的32位办事器体系,如Windows Server等,就竟单个法度可以应用到几许内存


    以上是笔者一些肤浅的懂得,尚待更多的研究论证,我会持续跟进这个话题也迎接您参加这个话题的评论辩论。


    我俩之间有着强烈的吸引力。短短几个小时后,我俩已经明白:我们的心是一个整体的两半,我俩的心灵是孪生兄妹,是知己。她让我感到更有活力,更完美,更幸福。即使她不在我身边,我依然还是感到幸福,因为她总是以这样或者那样的方式出现在我心头。——恩里克·巴里奥斯《爱的文明》
    分享到: