0

当我在接受采访时,面试官问我除了结构包装之外,C 语言中还有其他用法吗?所以我回答说除了结构包装我不知道。那么它还有其他用途吗?

4

1 回答 1

0
#pragma pack(size)

是用于更改结构填充方案的预处理器指令。通常一个结构会在其成员之间添加填充字节以加速内存获取操作。它使用的填充字节数取决于机器架构。例如,

struct sample {
    int a;
    char b;
    int c;
};

当我们看到上面的结构时,它只需要 9 个字节(4 + 1 + 4)来保存成员 a、b 和 c,但是对于 32 位架构,这个结构的变量需要 16 个字节(4 + 4 + 4)记忆。即使 char b 只需要 1 个字节,它也需要 4 个字节 1 来存储 b 的值,其他三个作为填充字节。

padding_size = (word_size of machine architecture > highest sized structure member datatype's size) ? highest sized structure member datatype's size : word_size of machine architecture;

我们可以使用预处理器指令强制分配填充大小#pragma pack(size)size应该是机器架构的 word_size 的 2 次方。

如果我们使用喜欢

#pragma pack(1)

对于上述结构,保存类型变量所需的内存总量struct sample将为 (4 + 1 + 4) 9 个字节。

于 2018-12-05T09:26:15.883 回答