【发布时间】:2016-08-28 13:18:35
【问题描述】:
以下bit field 示例代码来自here。它声称更好的存储效率。但是我想知道编译器是如何处理位域的?
我猜 C 编译器必须生成额外的指令以进行按位操作。所以虽然数据量减少了,但代码量却增加了。
任何熟悉 C 编译器的人都可以解释一下吗?
#include <stdio.h>
// A space optimized representation of date
struct date
{
// d has value between 1 and 31, so 5 bits
// are sufficient
unsigned int d: 5;
// m has value between 1 and 12, so 4 bits
// are sufficient
unsigned int m: 4;
unsigned int y;
};
int main()
{
printf("Size of date is %d bytes\n", sizeof(struct date));
struct date dt = {31, 12, 2014};
printf("Date is %d/%d/%d", dt.d, dt.m, dt.y);
return 0;
}
【问题讨论】:
-
你可以查看生成的汇编器来找出答案。
-
@OliverCharlesworth 感谢您的提醒。我怎么会忘记...
-
这取决于您的平台(底层硬件架构 + 指定编译器),但通常 - 是的,编译器很可能需要添加按位操作(这通常会导致更大的代码段和/或运行时执行速度较慢)。
-
@Nuncameesquecideti:在你最喜欢的搜索引擎上寻找
C bitfield... -
@Nuncameesquecideti:如果我显得粗鲁,我很抱歉,那不是故意的;有人在质疑整个问题的特征参数是否实际上是有效的语法,这让我发笑。
标签: c struct bit-fields