0

我有一个这样的数据结构:

struct mystruct
{
    float f;
    int16_t i;
};

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

4

1 回答 1

2

那是因为填充,给定您的系统架构,编译器会为结构添加一些空间。

如果你尝试添加另一个 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

于 2015-06-03T08:09:01.177 回答