【回転】データ位置合わせ
5970 ワード
, , , 。 , 。
:http://www.cnblogs.com/bakari/archive/2012/08/27/2658956.html
、
1、 byte , , , , , 。
2、 , 。 ,1 ,2 2 ,4 4 。
3、 , C P U 。
4、 C P U , 。 0 , 。 , W O R D 2 , D W O R D 4 , 。 C P U , C P U 。 , , 。
、
1、 。 。 , , 。 , int ( 32 ) , , , 2 , int 。 。 。
2、 。 , , , 。 。 , 。
、
, , 。 。 , 。
1、 , ? , :http://blog.csdn.net/arethe/article/details/2548867, 。
2、 , ( )
1)、
VS2003-VS2010,CB,DEV C++ , 8 , #pragma pack(value) value = 8。
1 #include <iostream>
2 using namespace std;
3
4 struct A
5 {
6 char _iC1;
7 long _il;
8 char _iC2;
9 double _id;
10 };
11 //
12 struct B
13 {
14 char _iC1;
15 char _iC2;
16 long _il;
17 double _id;
18 };
19 int main(){
20 cout << sizeof(A) << endl;
21 cout << sizeof(B) << endl;
22
23 return 0;
24 }
:
A:_iC1 ,long 4 , long , 3 , cc , 3cc( ),_il 4 ,_iC2 1 , double , 7cc, _id 8 。 sizeof(A) = 1+3+4+1+7+8 = 24 。
B: ,sizeof(B) = 1+1+2+4+8 = 16
:
:
sizeof( ) 。 sizeof( ) 。 , 。
2)、 , #pragma pack(value) value
1 #include <iostream>
2 using namespace std;
3
4 #pragma pack(4) //Note!
5 struct A
6 {
7 char _iC1;
8 long _il;
9 char _iC2;
10 double _id;
11 };
12 #pragma pack()
13 //
14 struct B
15 {
16 char _iC1;
17 char _iC2;
18 long _il;
19 double _id;
20 };
21 int main(){
22 cout << sizeof(A) << endl;
23 cout << sizeof(B) << endl;
24
25 return 0;
26 }
: sizeof(A) = 20
: _iC2 ,_iC2 double , ( ) ,4 < 8, 4. :
sizeof(A) = 1+3+4+1+3+8 = 20
, :
#pragma pack(n) : 、 n , , 。 、 n , n , 。 , : n , ; n 。
、
, , 。
1:
struct Practice1
{
char _szA[123];
int _iB;
float _iC;
double _dD;
};
1、 , 。
2、 #pragma pack(2), #pragma pack(), , ?
2:
struct Practice2
{
struct T1
{
char _cA;
int _iB;
float _fC;
} _objX;
int _iD;
char _iE;
};
1、 , 。
2、 #pragma pack(4), #pragma pack(), , ?
3:
struct Practice3
{
union T1
{
char _cT;
double _dT;
int _iT;
} _uT;
int _iA;
double _dB;
};
1、 , 。
2、 #pragma pack(1), #pragma pack(), , ?
:
:
1:
(1) 8, 0x0000 , #pragma pack(8)
char _szA[123]; 123+cc……cc=124
int _iB; 124+4=128
float _iC; 128+4 +cc +...+cc = 132 + 4cc = 136
double _dD; 136+8=144
(2) #pragma pack(2)
:123+cc+4+4+8=140
2:
(1)#pragma pack(8)
struct T1
{
char _cA; 1+cc…+cc=4
int _iB; 4+4=8
float _fC; 8+4=12
} _objX; 12
int _iD; 12+4=16
char _iE; 16+1 = 17+cc+…+cc = 20
:20
(2) #pragma pack(4)
:1+cc+cc+cc+4+4+4+1+cc+cc+cc=20
3:
(1) #pragma pack(8)
union T1
{
char _cT;
double _dT; 8
int _iT;
} _uT; 8
int _iA; 8+4+cc…+cc=16
double _dB; 16+8 =24
(2) #pragma pack(1)
:8+4+8=20
:
1 #include <iostream>
2 using namespace std;
3
4 struct Practice1
5 {
6 char _szA[123];
7 int _iA;
8 float _iB;
9 double _iD;
10 };
11
12 struct Practice2
13 {
14 struct T1
15 {
16 char _cA;
17 int _iB;
18 float _fC;
19 } _objX;
20 int _iD;
21 char _iE;
22 };
23
24 struct Practice3
25 {
26 union T1
27 {
28 char _cT;
29 double _dT;
30 int _iT;
31 } _uT;
32 int _iA;
33 double _dB;
34 };
35
36 int main(){
37 cout << sizeof(Practice1) << endl;
38 cout << sizeof(Practice2) << endl;
39 cout << sizeof(Practice3) << endl;
40 return 0;
41 }
1 #include <iostream>
2 using namespace std;
3
4 #pragma pack(2)
5 struct Practice1
6 {
7 char _szA[123];
8 int _iA;
9 float _iB;
10 double _iD;
11 };
12 #pragma pack()
13
14 #pragma pack(4)
15 struct Practice2
16 {
17 struct T1
18 {
19 char _cA;
20 int _iB;
21 float _fC;
22 } _objX;
23 int _iD;
24 char _iE;
25 };
26 #pragma pack()
27
28 #pragma pack(1)
29 struct Practice3
30 {
31 union T1
32 {
33 char _cT;
34 double _dT;
35 int _iT;
36 } _uT;
37 int _iA;
38 double _dB;
39 };
40 #pragma pack()
41
42 int main(){
43 cout << sizeof(Practice1) << endl;
44 cout << sizeof(Practice2) << endl;
45 cout << sizeof(Practice3) << endl;
46 return 0;
47 }