结构位域最大大小(C99、C++)
位结构字段的最大位宽度是多少?
struct i { long long i:127;}
我可以在结构体内部定义一个位字段,位字段的大小可达 128 位、256 位或更大吗?有一些超宽向量类型,例如 sse2(128 位)、avx1/avx2(256 位)、avx-512(下一个 Xeon Phis 为 512 位)寄存器;还有 gcc 中的 __int128 等扩展。
What is maximal bit width for bit struct field?
struct i { long long i:127;}
Can I define a bit field inside struct, with size of bitfield up to 128 bit, or 256 bit, or larger? There are some extra-wide vector types, like sse2 (128-bit), avx1/avx2 (256-bit), avx-512 (512-bit for next Xeon Phis) registers; and also extensions like __int128 in gcc.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
C99 §6.7.2.1,第 3 段:
C++0xa §9.6,第 1 段:
所以在 C 中你根本不能这样做,在 C++ 中它也不会做你想做的事。
C99 §6.7.2.1, paragraph 3:
C++0xa §9.6, paragraph 1:
So in C you can't do that at all, and in C++ it won't do what you want it to.
C++ 标准对位字段的大小没有设置任何限制,除了它必须大于或等于 0 - 第 9.6/1 节。它还说:
我想这可以用来表示某种最大尺寸。
当然,这并不意味着您的特定编译器实现支持任意大小的位字段。
The C++ Standard sets no limits on the size of a bit-field, other than that it must be greater or equal to zero - section 9.6/1. It also says:
Which I suppose could be taken to indicate some sort of maximum size.
This does not mean that your specific compiler implementation supports arbitrarily sized bit-fields, of course.
通常,您分配的位不能多于基础类型的位。如果
long long
是 64 位,那么您的位字段可能仅限于 :64。Typically, you cannot allocate more bits than the underlying type has. If
long long
is 64 bits, then your bitfield is probably limited to :64.由于位域的值被分配给整数,我假设您可以使用的最大位域值是 intmax_t 的大小。
编辑:
来自 C99 规范:
6.7.2.1 项目符号 9:
6.7.2.1 第 10 条:
Since the values of bit-fields are assigned to integers, I'd assume that the largest bit-field value you can use is that of the size of intmax_t.
Edit:
From the C99 Spec:
6.7.2.1 Bullet 9:
6.7.2.1 Bullet 10: