c++中各类型数据占据的字节长度
c++中各种类型数据类型占据字节长度
⾸先罗列⼀下C++中的数据类型都有哪些:
1、整形:int、long
2、字符型:char、wchar_t
3、布尔型:bool
4、浮点型:float、double
5、指针
⼀、整形
int占据操作系统⼀个内存单元的⼤⼩。long跟int相同
早先16位操作系统⼀个内存单元是16位,所以是2个字节;32位系统⼀个内存单元是是32位,所以是4字节;64位操作系统⼀个内存单元是16位,故占8个字节。
⼆、字符型
char类型通常占据⼀个字节,对于⽤于扩展字符集的wchar_t类型,需要占据两个字节。
三、布尔型
bool占据⼀个字节
四、浮点型
float占据4个字节,double是float的两倍即8个字节
五、指针
指针字节长度计算原理其实跟int差不多,⼀个指针的位数和操作系统的位数是相等的,即32位系统应该是4个字节,64位系统应该是8个字节。
代码如下
1 #include<iostream>
2
3 using namespace std;
4
5 int main()
6 {
7 int a;
8 long b;
9 char c;
10 wchar_t d;
11 bool e;
12 float f;
13 double g;
14 int*p= &a;
15
16 cout << sizeof(a) << endl;
17 cout << sizeof(b) << endl;
18 cout << sizeof(c) << endl;
19 cout << sizeof(d) << endl;
20 cout << sizeof(e) << endl;
21 cout << sizeof(f) << endl;
22 cout << sizeof(g) << endl;
23 cout << sizeof(p) << endl;
24 }
结果如下
qqtsj@qqtsj-Nitro-AN515-51:~/cpp$ g++ -o size1 size1.cpp
qqtsj@qqtsj-Nitro-AN515-51:~/cpp$ ./size1
4
8
1
4
1
4
8
4
字节对齐,代码如下
1 #include<iostream>
2
3using namespace std;
4
5struct A
6 {
7int a;
8char b;
9short c;
10 };
11
12struct B
13 {
14char a;
15int b;
16short c;
17 };
18
19struct E
20 {
21short a;
22char b;
23int c;
24 };
25
26#pragma pack(2)
27struct C
28 {
29char a;
30int b;
31short c;
32 };
float几个字节多少位33
34#pragma pack(1)
35struct D
36 {
37int a;
38char b;
39short c;
40 };
41
42int main(int argc, char ** argv)
43 {
44
45 cout << sizeof(A) << ""<< sizeof (B) << ""<< sizeof (C) << ""<< sizeof (D) << ""<< sizeof (E) << endl;
46return0;
47 }
~
记录⼀下如何理解字节对齐,结构体中总是会涉及到字节对齐,很多⼈都不是很理解,我也⼀样,今天就⼀起来解读他。
1.编译器对字节对齐的⼀些规则
我从下⾯三条说明了编译器对字节处理的⼀些原则。当然除了⼀些特殊的编译器在处理字节对齐的⽅式也不⼀样,这些情况我未碰到过,就不作说明了。
a. 关于数据类型⾃⾝的对齐值,不同类型会按不同的字节来对齐。
类型对齐值(字节)
char1
short2
int4
float4
double4
b. 类、结构体的⾃⾝对齐字节值。对于结构体类型与类对象的对齐原则:使⽤成员当中最⼤的对齐字节来对齐。⽐如在Struct A中,int a 的对齐字节为4,⽐char,short都⼤,所以A的对齐字节为4
c. 指定对齐字节值。意思是指使⽤了宏 #pragma pack(n)来指定的对齐值
d. 类、结构及成员的有效对齐字节值。有效对齐值=min(类/结构体/成员的⾃⾝对齐字节值,指定对齐字节值)。 有效对齐值决定了数据的存放⽅式,sizeof 运算符就是根据有效对齐值来计算成员⼤⼩的。简单来说,有效对齐其实就是要求数据成员存放的地址值能被有效对齐值整除,即:地址值%有效对齐值=0
字节对齐⼀般默认4个字节对齐。字节分配⼀般以偶数分配。
32位系统默认4个字节进⾏对齐,64位系统默认8个字节对齐,
⼀个字节占8位。
例struct A
int 4个字节
char 与int 对齐,因为char分配了4个字节,short 2个字节,可以分配到char⾥⾯
因此结构体A就总共分配了8个字节。
以下的结构体都是这样分析的。
⼀个⼩⽩的总结
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论