32位与64位之谈

在我们购买电脑时总会涉及到32位与64位这个词;在安装软件时仍然会听到这个词,而作为程序员更多能接触到这个词,经常有一些问题是在问对于一个32位系统或者64位系统,类型占的字节或者位空间,这个问题可以在不同位数的编辑器进行编码,然后能够输出不同类型变量具体占的位数,接下来我来先分享一下:

1、对于32和64的区别;

2、然后说一下不同变量在不同的操作系统位数下具体占的空间;

3、以及如何编码来确定在编译器确定位数

一、32位和64位的区别

首先32位和64位指的是:
CPU的位和字长
其中字长:电脑技术中对CPU在单位时间内(同一时间)能一次处理的二进制数的位数叫字长。
64位处理器包括AMD Athlon 64与INTEL的EMT64处理器都是指通用寄存器的位宽,不是总线。

(一)、在内存与CPU上的区别
首先,相信选择64位Windows 7的网友中很有大比例是内存大于或等于4GB的。在32位Windows 7下,可能会显示内存可使用3.25G,这让很多网友感到不安。没错,可寻址的内存空间确实是32位Windows 7和64位Windows 7最为显著的特点。
32位的CPU(准确的说是运行在32位模式下的CPU)只能寻址最大4GB的内存,受制于此,32位的操作系统也只能识别最大4GB的内存,由于在系统中,除了内存之外,还有很多存储设备,因此,真正可以利用的内存空间肯定小于4GB,也就是我们看到的系统属性中显示的3.xxG。
但64位CPU则有了很大改变,64位CPU的最大寻址空间为2的64次方bytes,计算后其可寻址空间达到了惊人的16TB(treabytes),即16384GB。当然,这只是理论,从实际应用上,Windows 7 64bit的各版本分别为8GB-192GB,其中,家庭普通版能支持8GB内存,家庭高级版能支持16GB内存,而64位的Windows 7专业版、企业版和旗舰版最高可支持192GB内存。
也就是说,内存大于等于4GB的用户,由于受到32位硬件限制,因此,不能最大化的利用硬件资源,这就很有必要安装64位操作系统以最大化利用资源。
需要注意的是,64位系统需要64位CPU的支持,在安装64位Windows 7前请先确认你的CPU是否支持64位,一般而言,2006年之后购买的CPU均支持64位模式。
如果仅考虑这点,对于内存小于4GB的用户,32位Windows 7更适合大家使用,因为64位版本会占用更多的系统内存资源,起的作用适得其反了。
(二)、运算性能,这也是很多网友非常关注的。
理论上,64位平台上的运行性能要远超过32位平台。原因在与CPU通用寄存器的数据位宽,64位平台是64位,而32位平台是32位,也就是说,64位平台可以运行64位数据指令,处理器一次可提取64位数据(只要两个指令,一次提取8个字节的数据),比32位(需要四个指令,一次提取4个字节的数据)提高了一倍,理论上性能会相应提升1倍。
相信看到这里,又会有很多用户动摇了,甚至有很多内存不足4GB的网友们想要体验下64位Windows 7的威力,但仍然有个问题。
(三)、这就是应用软件的问题。
在64位Windows 7下运行32位的应用软件并不会让你感觉到性能的飞跃,只有64位的应用软件才能最大化发挥64位平台的优势。但显而易见,目前64位的应用程序在种类的数量上都要远低于32位平台,不过值得高兴的是,越来越多的软件开发者开始将他们的软件移植到64位平台上。
至少在当前,仍然有很多软件不兼容Windows 7 64位版本,这一切需要时间来解决。
二、不同变量在不同的操作系统位数下具体占的空间

此处要注意字节(byte)还是位数(bit) 1byte = 8bit

Win64, 也就是X64编译配置下:

char:1字节;

short:2字节;

int:4字节;

long:4字节;

long long:8字节;

float:4字节;

double:8字节;

long double:8字节;

wchar_t:2字节;

bool:1字节;

 

char*:8字节;

bool*:8字节;

short*:8字节;

int*:8字节;

long*:8字节;

long long*:8字节;

float*:8字节;

double*:8字节;

long double*:8字节;

wchar_t*:8字节;

下面是Win32, 也就是X86编译配置下变量所占字节数:

 

char:1字节;

short:2字节;

int:4字节;

long:4字节;

longlong:8字节;

float:4字节;

double:8字节;

long double:8字节;

wchar_t:2字节;

bool:1字节;

 

char*:4字节;

bool*:4字节;

short*:4字节;

int*:4字节;

long*:4字节;

long long*:4字节;

float*:4字节;

double*:4字节;

long double*:4字节;

posted on 2018-07-19 09:40  小呆呆yy  阅读(416)  评论(0编辑  收藏  举报