C语言中关于位段所占的存储空间问题

来源:百度知道 编辑:UC知道 时间:2024/06/19 12:01:08
很多C语言教材上都明确说明“不允许位段跨越一个字的边界,如果一个字余下的空间不能容纳一个位段,则这个位段从相邻的下一个字的边界开始存放”。但是很多题的结果似乎没有考虑这一条。比如:
struct st
{
unsigned a:10;
unsigned b:12;
unsigned c:2;
}x;
sizeof(x)的结果是3个字节。
按照理论位段b应该是从下一个字开始存啊,sizeof(x)不就应该是4个字节了吗。
是我错了吗??

哦这里的问题比较复杂的,主要是由于对struct进行内存分配时有很多规则,一言半语确实说不全面。
具体关于这方面的内容推荐你看看下面这篇文章,写的很精细,分析的很到位,相信对你理解这个问题会有很大帮助~~

http://panweizeng.com/document/archives/201

不能说有一个字节丢下了就说他给上个了呀。中间的那个字节空闲了,谁都没有占用的。