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)) 这里复制的字节大小需要自己计算。