- 论坛徽章:
- 0
|
大家好,关于位域,仍旧有些地方不是很清楚,希望大家能够解答一下。
上图中为 WIKI 上面关于 "Bit Field" 的论述,其中说到 "Bit Field" 的两个缺点:
(1) the ordering of bits in memory is cpu dependent (这个应该是 ‘大小端’ 的问题)
(2) memory padding rules can vary between compilers (这个应该是 ‘填充不填充’ 的问题)
根据我个人的理解:
对于 (2),我感觉应该和移植性没有什么关系吧。不同的结果也就是:两个不同的平台,定义相同的 structure 所占据的字节数不一样而已,对程序
的正确性应该没有什么影响吧?【问题1】
对于 (1),我感觉应该和移植性也没有什么关系吧,int 类型占据四个字节,大端的平台和小端的平台也不一样啊,干嘛非得在 Bit Field 这个地方突出说明呢?【问题2】
还有一个需要确认的问题:
----------------------------
例如:
typedef struct bit_field
{
unsigned char a : 8 ;
unsigned char b : 8 ;
} bit_field_t ;
上面的 bit field 占据 2 个字节,有两个成员(a 和 b)
假设
unsigned short = 0x1234 ;
bit_field_t bf ;
memcpy( &bf, &tmp, sizeof(unsigned short) ) ;
printf(" a = %d\n", bf.a) ;
printf(" b = %d\n", bf.b) ;
那在不同的平台上,上面的输出会有不同吗?【问题3】 |
|