错误示例:字节对齐

#include<vector>
#include<iostream>
#include<stdio.h>

struct student {
    char c;
    int age;
}__attribute__((packed));
//win32 系统中 codeblock 运行结果:为8,char和int换位置后结果为:5 

#pragma pack(push, 1)
struct student1 {
    char c;
    int age;
};
#pragma pack(pop)
//无论哪个平台结果都是5
int main() {
    student st;
    student1 st1;
    std::cout << sizeof(st) << std::endl;
    std::cout << sizeof(st1) << std::endl;
    return 0;
}

 在student结构体中,如果在结构体后面加__attribute__((packed)),char在int前和后,sizeof()计算出来的是不一样的,具体原因不清楚,暂时先记下来。但是如果是加 #pragma pack(push,1) 和 pragma pack(pop)就不会出现这个问题。

猜你喜欢

转载自javaeye-hanlingbo.iteye.com/blog/2410321