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