当前位置:首页 C++ > 正文

为什么sizeof(MyStruct) 是16

作者:野牛程序员:2023-12-05 09:05:15 C++阅读 2633

为什么sizeof(MyStruct) 是16

#include <iostream>

struct MyStruct {
    int a;
    char b;
    double c;
};

int main() {
    std::cout << "Size of MyStruct: " << sizeof(MyStruct) << " bytes" << std::endl;
    std::cout << "Size of MyStruct: " << sizeof(int) << " bytes" << std::endl;
    std::cout << "Size of MyStruct: " << sizeof(char) << " bytes" << std::endl;
    std::cout << "Size of MyStruct: " << sizeof(double) << " bytes" << std::endl;

    return 0;
}

 为什么sizeof(MyStruct) 是16

sizeof(MyStruct) 返回 16 字节的原因是由于结构体对齐(padding)导致的。

在内存中,结构体的成员通常会被按照某种规则对齐,以便提高访问速度。这个规则是基于结构体成员中占用字节数最大的数据类型的大小。在你的 MyStruct 中,最大的数据类型是 double,它占用 8 字节。

结构体成员的对齐规则是:每个成员的起始位置相对于结构体的起始位置的偏移量必须是成员大小的整数倍。因此,为了满足对齐规则,编译器会在结构体的某些位置插入填充字节。

具体地,MyStruct 中的成员包括:

  • int(占 4 字节)

  • char(占 1 字节)

  • double(占 8 字节)

按照对齐规则,int 在 0 字节处,char 应该在 4 字节处开始,但是为了满足 double 的对齐要求,char 后面会有 3 字节的填充,然后 double 在 8 字节处开始。因此,sizeof(MyStruct) 就是 4(int) + 3(填充) + 1(char) + 8(double) = 16 字节。



野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892
野牛程序员教少儿编程与信息学竞赛-微信|电话:15892516892
相关推荐

最新推荐

热门点击