现在的位置: 首页 > 综合 > 正文

C\C++基本数据类型占用的字节数和注意事项

2018年04月19日 ⁄ 综合 ⁄ 共 1565字 ⁄ 字号 评论关闭

、程序运行平台 

       不同的平台上对不同数据类型分配的字节数是不同的。 
       个人对平台的理解是CPU+OS+Compiler(处理器+系统+编译器是因为: 
       1、64位机器也可以装32位系统(x64装XP); 
       2、32位机器上可以有16/32位的编译器(XP上有tc是16位的,其他常见的是32位的); 
       3、即使是32位的编译器也可以弄出64位的integer来(int64)。 
       以上这些是基于常见的wintel平台,加上我们可能很少机会接触的其它平台(其它的CPU和OS),所以个人认为所谓平台的概念是三者的组合。 
       虽然三者的长度可以不一样,但显然相互配合(即长度相等,32位的CPU+32位的OS+32位的Compiler)发挥的能量最大。 
       理论上来讲 我觉得数据类型的字节数应该是由CPU决定的,但是实际上主要由编译器决定(占多少位由编译器在编译期间说了算)。 


二、常用数据类型对应字节数 

       可用如sizeof(char),sizeof(char*)等得出 

      32位编译器: 
       char :1个字节 
       char*(即指针变量): 4个字节(32位的寻址空间是2^32, 即32个bit,也就是4个字节。同理64位编译器) 
       short int : 2个字节 
       int: 4个字节 
       unsigned int : 4个字节 
       float: 4个字节 
       double: 8个字节 
       long: 4个字节 
       long long: 8个字节 
       unsigned long: 4个字节 


       64位编译器: 
       char :1个字节 
       char*(即指针变量): 8个字节 
       short int : 2个字节 
       int: 4个字节 
       unsigned int : 4个字节 
       float: 4个字节 
       double: 8个字节 
       long: 8个字节 
       long long: 8个字节 
       unsigned long: 8个字节 

三、注意事项

下面列出一些基本类型在32位及64位机上的大小差异

 

Char*

long

size_t

time_t

long long int

unsigned long

32位机器

4字节

4字节

4字节

4字节

8字节

4字节

64位机器

8字节

8字节

8字节

8字节

8字节

8字节

但如果是linux系统的话,在64位编译器下longunsigned long类型将变成8个字节。

在写跨平台的程序时,一定要注意这些基本类型的长度大小。

 

bool处理:

 从学习C++语言基础的时候,我都一直以为bool数据类型是占用一个字节的数据位的,但最近仔细复读(c++)中发现,它并不是一定会占用一个字节的数据位的,bool数据类型与int类型一样,占用内存的字节数都是与编译系统相关的,它在不同的编译系统占用的字节数有所不同,在VC++6.0中,它占用的字节数是1个字节,所以为了能编写可移植性好的和占用内存少的程序,bool的变量,可以应用以下方式来定义(至少我现在开始是这样做的):

       bool  m_bRet : 1;

       这样定义的好处是,当你定义了很多的这样的bool类型,它所占用的数据就会越少,因为一个字节可以定义8bool的类型,如果单独定义一个这样的类型,它一样占用一个字节的数据位,这不起作用,而当定义多点这样的数据类型它才起作用。

 

抱歉!评论已关闭.