加入收藏 | 设为首页 | 会员中心 | 我要投稿 济南站长网 (https://www.0531zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

畅聊结构体及Linux下内存分配原则

发布时间:2021-11-22 13:42:10 所属栏目:教程 来源:互联网
导读:结构体在程序中的应用是很广泛的,要处理的问题越复杂,数据量越多月杂,就越需要用到结构体。比如网络,内核,驱动等等。熟练使用结构体对每个程序员都是至关重要的。一个好的结构体不仅能使程序体系结构清晰,而且使得操作灵活,可扩展性强。linux网络之所

结构体在程序中的应用是很广泛的,要处理的问题越复杂,数据量越多月杂,就越需要用到结构体。比如网络,内核,驱动等等。熟练使用结构体对每个程序员都是至关重要的。一个好的结构体不仅能使程序体系结构清晰,而且使得操作灵活,可扩展性强。linux网络之所以很强大,这和它里设计合理的数据结构有很大关系。
 
结构体定义:
 
struct a{  
    int xx:4;  
    int yy:4;  
};
结构体初始化:
 
方式一:
 
struct a aa ={  
    xx:2,  
    yy:3  
};
方式二:
 
struct a cc ={  
    .xx=6,  
    .yy=1,  
};
方式三:
 
struct a dd={4,2};
 
在定义中,可以限制变量的位的作用域,比如上面的:int xx:4;这表明xx的有效域只有4位,也就是能给他赋值的最大值为15,如果超过这个值,编译器就会报错:warning: overflow in implicit constant conversion。
 
在这里如果你给xx赋值为15,如:
 
struct a cc ={  
    .xx=15,  
    .yy=1,  
};
然后输出:
 
printf("cc.xx = %dn",cc.xx);
 
结果会是:-1
 
因为这里定义的xx为int 型,15的二进制位1111,最高位为1,表示为负数,所以取反加1后为0001。所以是-1。
 
这种位域操作的好处是当你不需要用到你定义的类型的长度时,可以加位域操作以节省内存空间。

(编辑:济南站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读