结构体定义一些小技巧

来源:互联网 发布:简单数据库软件有哪些 编辑:程序博客网 时间:2024/04/29 12:13
#include <iostream>using namespace std;//#pragma pack(1)struct A{int a;char b;short c;};struct B{char b;int a;short c;};int main(){cout << sizeof(struct A) << endl;cout << sizeof(struct B) << endl;}



运行结果:


这个主要是由于字节对齐所引起的
结构体默认的字节对齐一般满足三个准则:
(1)结构体变量的首地址能够被其最宽基本类型成员的大小所整除。
(2)结构体每个成员相对于结构体首地址的偏移量(offset)都是成员自身大小的整数
         倍,如有需要,编译器会在成员之间加上填充字节(Internal Adding)。
(3)结构体的总大小为结构体最宽基本类型成员大小的整数倍,如有需要,编译器会在
         最末一个成员之后加上填充字节(Trailing Padding)


一般利用下述代码改变其默认的字节对齐数,其中n是字节对齐数

#pragma pack(n)



原创粉丝点击