新钥匙网站建设,做网站首页看不到图片,网页休闲小游戏,企业网络推广方案的制定本篇文章目录 1. 声明位段2. 位段的内存分配3. 位段的跨平台问题4.位段的应用5. 如何解决位段的跨平台问题#xff1f; 1. 声明位段
位段的声明和结构是类似的#xff0c;有两个不同#xff1a;
位段的成员必须是 int、unsigned int 或 char。位段的成员名后边有一个冒号和… 本篇文章目录 1. 声明位段2. 位段的内存分配3. 位段的跨平台问题4.位段的应用5. 如何解决位段的跨平台问题 1. 声明位段
位段的声明和结构是类似的有两个不同
位段的成员必须是 int、unsigned int 或 char。位段的成员名后边有一个冒号和一个数字。
struct A
{int _a:2;int _b:5;int _c:10;int _d:30;
};2. 位段的内存分配
位段的空间上是按照需要以4个字节 int 或者1个字节 char 的方式来开辟的。冒号后面的数字代表该成员大小为多少个bit位是bit位不是字节千万不要被成员的数据类型给迷惑了认为int就是分配4个字节。
struct A
{int _a:2; // _a的大小为2个bit位int _b:5; // _b的大小为5个bit位int _c:10; // _c的大小为10个bit位int _d:30; // _d的大小为0个bit位
};举例如何分配内存空间
一个个说明因为每个成员变量只申请个位数的bit位所以是按1个字节来申请内存空间的。
a只能存储3个bit位大小数据a 10补码为1010只能存后三位010从低位开始存那么这1个字节还剩5个bit位。b大小为4个bit位还剩5个bit位能存下b暂时不用开辟空间。b 12补码为11004个bit位刚好存下4位最后这1个字节还剩1个bit位。c的大小是5个bit位剩下的1个bit位不够存这1个bit位就直接不使用了浪费掉再开辟1个字节存储cc 3补码为00115个bit位能存下00011还剩3个bit位。d的大小是4个bit位剩下的3个bit位不够存然后浪费掉再开辟1个字节内存空间存储d。d 4补码为01001个字节能存下。
总共开辟了3个字节。
3. 位段的跨平台问题 位段涉及很多不确定因素位段是不跨平台的注重可移植的程序应该避免使用位段。 int 位段被当成有符号数还是无符号数是不确定的。位段中最大位的数目不能确定。16位机器最大1632位机器最大32位段成员大小写成27在16位机器会出问题。位段中的成员在内存中从左向右分配还是从右向左分配标准尚未定义。当一个结构包含两个位段第二个位段成员比较大无法容纳于第一个位段剩余的位时是舍弃剩余的位还是利用这是不确定的在vs编译器中的实现是直接舍弃剩余位数。
总结跟结构相比位段可以达到同样的效果但是可以很好的节省空间但是有跨平台的问题存在。
4.位段的应用 对于消息的传输不仅仅只是把发送的消息传输到目的地就完了那么简单。实际上会将消息进行一个打包其中还包含了很多信息缺少这些信息是无法传输消息的。比如你的机器ip地址和你要发送的目的地对方的ip地址这两个信息非常重要当然也不是说其它信息就不重要了图中任何一点都很重要。
对于上面这些信息如果不使用位段来分配数据就会比较大。对于网络传输数据而言当然是越小的数据量网络更流畅就好比现实生活中的马路大车多了会比较堵塞要都是小车那么路况就比较畅通。
5. 如何解决位段的跨平台问题
其实位段的不兼容、不可移植性也不是很可怕。解决的办法就是针对每个不同的机器/平台设计对应的程序即可唯一的不方便之处应该就是工作量变大了不过复制粘贴针对性改一改应该没毛病。