c/c++ 基本数据类型在16位、32位、64位操作系统下所占字节大小(存储空间)

 

数据类型 16位操作系统(byte) 32位操作系统(byte) 64位操作系统(byte) 取值范围
char 1 1 1 -128 ~ 127
unsigned char 1 1 1 0 ~ 255
short int / short 2 2 2 -32768~32767
unsigned short 2 2 2 0 ~ 65535
int 2 4 4 -2147483648~2157483647
unsigned int 2 4 4 0~4294967295
long int / long 4 4 8 -2147483648~2147483647
unsigned long 4 4 8 0~42294967295
long long int / long long 8 8 8

-9223372036854775808
~9223372036854775807

double 8 8 8

1.7E+10的负308次⽅~1.7E+10的正308次⽅ 

float 4 4 4 3.4E+10的负38次⽅~3.4E+10的38次⽅ 
long double   10/12 10/16 有效位10字节。32位为了对齐实际分配12字节;64位分配16字节
指针 2 4 8  /

总结:常用的32位操作系统和64位操作系统对比:除了 * 与long随操作系统子长变化而变化外,其他的都固定不变:bool 1个字节 、char 1个字节、 int 4个字节、float 4个字节 、doubl 8个字节、long long 8个字节

扩展1:8bit = 1Byte (字节,即Byte,是由八个位组成的一个单元,也就是8个bit组成1个Byte) 、1024Byte = 1KB、1024KB = 1MB、1024MB = 1GB、1024GB = 1TB 

示例1:

  uint32_t* pRead = NULL;  // 这是 uint32_t 类型的一个指针,它本身的大小是4字节或8字节指向一个内存地址(这个地址一般用16进制来表示)。

  pRead = (uint32_t*)malloc(16); // 这是申请16个uint32_t的空间,并返回首地址。当 pRead += 5 时,表示它往后移 5 个 uint32_t 的距离,地址往后偏移 5*4 ,也就是在原地址(16进制)的基础上加上十进制的 5*4。如果使用 memcpy(pRead, pData, Data_Size * sizeof(uint32_t)) 这里复制的字节大小需要自己计算。

  short* ts = NULL; // 这是 short 类型的一个指针,它本身的大小是4字节或8字节指向一个内存地址(这个地址一般用16进制来表示)。

  short* ts = (short*)malloc(16); // 这是申请16个short的空间,并返回首地址。当 pRead += 5 时,表示它往后移 5 个 short 的距离,地址往后偏移 5*2 ,也就是在原地址(16进制)的基础上加上十进制的 5*2。如果使用 memcpy(pRead, pData, Data_Size * sizeof(short)) 这里复制的字节大小需要自己计算。

posted @ 2022-11-25 14:10  封兴旺  阅读(1200)  评论(0编辑  收藏  举报

联系方式: 18274305123(微信同号)