C\C++基本数据类型占用的字节数和注意事项
来源:互联网 发布:Linux aria2 下载出错 编辑:程序博客网 时间:2024/05/01 11:33
一、程序运行平台
不同的平台上对不同数据类型分配的字节数是不同的。个人对平台的理解是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位编译器下long和unsigned long类型将变成8个字节。
在写跨平台的程序时,一定要注意这些基本类型的长度大小。
bool处理:
从学习C++语言基础的时候,我都一直以为bool数据类型是占用一个字节的数据位的,但最近仔细复读(c++)中发现,它并不是一定会占用一个字节的数据位的,bool数据类型与int类型一样,占用内存的字节数都是与编译系统相关的,它在不同的编译系统占用的字节数有所不同,在VC++6.0中,它占用的字节数是1个字节,所以为了能编写可移植性好的和占用内存少的程序,bool的变量,可以应用以下方式来定义(至少我现在开始是这样做的):
bool m_bRet : 1;
这样定义的好处是,当你定义了很多的这样的bool类型,它所占用的数据就会越少,因为一个字节可以定义8个bool的类型,如果单独定义一个这样的类型,它一样占用一个字节的数据位,这不起作用,而当定义多点这样的数据类型它才起作用。
- C\C++基本数据类型占用的字节数和注意事项
- C中 各个数据类型占用的字节数
- 各种数据类型在Win32和Win64系统下所占用的字节数(C语言)
- 基本数据类型所占的字节数【C/C++】
- c和c++中各种基本数据类型占的字节数和表示范围
- 基本数据类型占用的字节
- C/C++32位与64位数据类型占用的字节数
- C语言数据类型占据的字节数
- C语言 数据类型的字节数
- C语言里的数据类型的大小及占用字节
- C/C++基本数据类型所占字节数
- C/C++基本数据类型所占字节数
- C/C++基本数据类型所占字节数
- C/C++基本数据类型所占字节数
- C/C++基本数据类型所占字节数
- C/C++基本数据类型所占字节数
- C/C++基本数据类型所占字节数
- C/C++基本数据类型所占字节数
- 定义事务传播属性
- R Api
- html div margin:0 auto;不居中的原因
- makefile函数使用 字符串处理函数
- CENTOS6.4中安裝openwebmail 2.53
- C\C++基本数据类型占用的字节数和注意事项
- Surrounded Regions
- php连mysql报错:Call to undefined function mysql_connect()
- 直方图均衡化处理图像(python)
- 降息后主流互联网理财产品恐难保四,仍有部分坚挺
- warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead.
- Android系统根目录结构及说明
- 汉诺塔VIII
- ================= 华 丽 的 分 割 线====================