欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

错误示例:字节对齐 博客分类: c++  

程序员文章站 2024-03-19 10:21:16
...
#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)就不会出现这个问题。