欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

C 语言]使用结构实现位段 - III.

最编程 2024-10-10 10:03:05
...

   位段虽然很节省空间,但是它却存在很大的跨平台问题,可移植性很低,因为在C语言标准中,位段的很多东西是没有规定的,导致各种编译器在实现它的时候,采用了不同的方法,我们现在来看看具体它的问题在哪里:

  1. int 位段被当成有符号数还是⽆符号数是不确定的,也就是说可能在有的编译器是有符号数,有的是无符号数,那么在把int位段当作有符号数的编译器上写的代码,可能就不能在把int位段当作无符号数的编译器上运行,或者运行后有bug存在,等等问题
  2. 位段中最⼤位的数⽬不能确定,因为32位机器的int是2个字节,也就是16个比特位,64位机器的int是4个字节,也就是32个比特位,如果把一个int位段成员写成27个比特位,那么它在32位上的机器就会出问题
  3. 位段中的成员在内存中从左向右分配,还是从右向左分配,C语言标准没有定义,所以不同编译器就有不同的实现方法,而VS就是采用从右向左的方式,其它有的编译器可能就是从左向右分配空间,所以在不同编译器运行相同的位段结果也可能不同
  4. 当⼀个结构包含两个位段,第⼆个位段成员比较,无法容纳于第⼀个位段剩余的位时,是舍弃剩余的位还是利用,这是不确定的,像VS就会舍弃那些剩余的位,直接使用新的空间

   所以综上4个理由,位段在使用的时候不一定能跨平台,也就是可移植性很低,但是相比于结构体,它能节省很多空间,我们继续学习就知道了

推荐阅读