首页 > 解决方案 > C 编程中的 pragmapack() 除了结构包装还有其他用途吗?

问题描述

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

标签: cgeneric-programmingstructure-packing

解决方案


#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 个字节。


推荐阅读