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


__EOF__

本文作者封兴旺
本文链接https://www.cnblogs.com/fxw1/p/16924963.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   封兴旺  阅读(1697)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
历史上的今天:
2020-11-25 uniapp兄弟组件如何修改数据?(一看机会!超级简约!)
2020-11-25 uniapp和vue 父向子传值、传方法及子向父传值。(一看就会!超级简约!)

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

点击右上角即可分享
微信分享提示