当前位置:编程学习 > C/C++ >>

struct数据对齐与#pragma pack(n)

对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”
 

补充:软件开发 , C语言 ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,