生活随笔
收集整理的這篇文章主要介紹了
                                
内存字节对齐问题
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.                        
 
                                
                            
                            
                            今天看到一個(gè)求結(jié)構(gòu)體偏移量的題目,可以使用宏來求解,覺得很是新奇,繼續(xù)深入考慮到結(jié)構(gòu)體字節(jié)對(duì)齊問題。參考網(wǎng)上的內(nèi)容,對(duì)齊的規(guī)則有如下兩條:
 第一個(gè)數(shù)據(jù)成員從offset=0的地址開始放,以后的數(shù)據(jù)成員存放的起始位置要么為本數(shù)據(jù)大小的整數(shù)倍要么為其體內(nèi)所含子成員大小的整數(shù)倍。結(jié)構(gòu)體的sizeof得到的大小肯定為其內(nèi)部最大成員的大小的整數(shù)倍;網(wǎng)上有說結(jié)構(gòu)體內(nèi)有子結(jié)構(gòu)體時(shí),子結(jié)構(gòu)體的開始位置應(yīng)該為其內(nèi)部最大數(shù)據(jù)成員大小的整數(shù)倍,經(jīng)實(shí)驗(yàn),不符合此條。同時(shí)可以使用#pragma pack(n),來改變對(duì)齊的大小,一般都設(shè)置為1,2,4。默認(rèn)的值和機(jī)器字長有關(guān)。  1 #include <
string>
 2 #include <iostream>
 3 //#pragma pack(1)
 4 #define FIND(type, member)  (size_t)&(((type*)0)->member)
 5 using namespace std;
 6 struct aa{
 7     int a;
 8     char b;
 9     double c;
10 };
11 
12 struct Node{
13     char a;
14     int ia;
15     double da;
16     char b;
17     char c;
18     aa sa;
19 };
20 int main(
int argc, 
char*
 argv[]){
21     cout << FIND(
struct Node, a) <<
 endl;
22     cout << FIND(
struct Node, ia)<<
 endl;
23     
24     cout << FIND(
struct Node, da)<<
 endl;
25     cout << FIND(
struct Node, b)<<
 endl;
26     cout << FIND(
struct Node, c)<<
 endl;
27     cout << 
"sa" << FIND(
struct Node, sa)<<
 endl;
28     cout << 
"sizeof(double):" << 
sizeof(
double) <<
 endl;
29     cout << 
"sizeof(aa):" << 
sizeof(aa) <<
 endl;
30     cout << 
"sizeof(Node):" << 
sizeof(Node) <<
 endl;
31 
32     cout << 
"---------------------------------------";
33     Node *p = 
new Node;
34     cout << 
"&p:" << (
int*)p <<
 endl;
35     cout << 
"&p->a:" <<(
int*)&(p->ia) <<
 endl;
36 
37 }  
?
 ?
 
轉(zhuǎn)載于:https://www.cnblogs.com/wyqx/p/3346364.html
                            總結(jié)
                            
                                以上是生活随笔為你收集整理的内存字节对齐问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
                            
                            
                                如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。