程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> struct數據對齊與#pragma pack(n)

struct數據對齊與#pragma pack(n)

編輯:關於C語言

對struct數據對齊與#pragma pack(n)的理解一直存在誤區,這裡做一個總結,便於以後記憶。
       規則主要有兩條:
       1.結構,聯合或者類的數據成員,第一個放在偏移為0的地方,以後每一個數據成員的對齊,按照#pragma pack指定的數值和這個數據成員的自身長度來定,取較小的那個。
       2.對於整體結構的對齊,則按照結構體中最大數據成員和#pragma pack的大小來定,去較小的那個。
以下是測試代碼:
Cpp代碼 
#include<iostream> 
using namespace std; 
struct test 

    short a; 
    short b; 
    int c; 
    char d; 
}; 
#pragma pack(4) 
struct test2 

    char a; 
    short b; 
    char c; 
}; 
#pragma pack() 
struct s1 

    short a; 
    long b; 
}; 
struct s2 

    char c; 
    s1 d; 
    long long e; 
}; 
#pragma pack(4) 
struct s3 

    int a; 
    char b; 
    short c; 
    char d; 
}; 
struct s4 

    char a; 
    short b; 
    char c; 
}; 
#pragma pack() 
#pragma pack(2) 
struct s5 

    int a; 
    char b; 
    short c; 
    char d; 
}; 
#pragma pack() 
int main() 

    cout<<sizeof(test)<<endl; 
    cout<<sizeof(test2)<<endl; 
    cout<<sizeof(s1)<<endl; 
    cout<<sizeof(s2)<<endl; 
    cout<<sizeof(s3)<<endl; 
    cout<<sizeof(s4)<<endl; 
    cout<<sizeof(s5)<<endl; 
    unsigned int ccc; 
    cout<<sizeof(ccc)<<endl; 

作者“plussai”
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved