在 C++11 中,为什么 int16_t 在结构内的浮点数之后声明时大小为 4?

In C++11, why does int16_t have a size of 4 when declared after a float inside a struct?

我有这样的数据结构:

struct mystruct
{
    float f;
    int16_t i;
};

sizeof(int16_t) 给出 2,但 sizeof(mystruct) 给出 8 而不是 6。这是为什么?如何在我的数据结构中声明一个 2 字节的 int16_t 变量?

这是因为填充,鉴于您的系统架构,编译器会向结构中添加一些 space。

如果您尝试添加另一个 int16_t,您会发现该结构的大小仍为 8。

struct mystruct
{
    float f;
    std::int16_t i;
    std::int16_t g;
};

在你原来的情况下

struct mystruct
{
    float f;
    std::int16_t i;
    //2 bytes padding
};

另请注意,您可以在结构中的成员之间进行填充,这就是为什么通常建议通过减小顺序大小对成员进行排序以最大程度地减少填充。

你可以在相应的百科页面快速阅读,写得很好。 http://en.wikipedia.org/wiki/Data_structure_alignment#Typical_alignment_of_C_structs_on_x86