当前位置:  技术问答>linux和unix

关于遇到的Linux中的一些对齐宏到底有什么用呢

    来源: 互联网  发布时间:2017-03-07

    本文导语:  最近看netlink,发现里面定义了一些对齐宏,通常都是每个结构体定义了对应的一组宏,比如: struct rtattr结构体定义了一组宏: #define RTA_ALIGNTO 4 #define RTA_ALIGN(len) (((LEN)+RTA_ALIGNTO-1)&~(RTA_ALIGNTO-1)) #define RTA_LENGTH(len)...

最近看netlink,发现里面定义了一些对齐宏,通常都是每个结构体定义了对应的一组宏,比如:
struct rtattr结构体定义了一组宏:
#define RTA_ALIGNTO 4
#define RTA_ALIGN(len) (((LEN)+RTA_ALIGNTO-1)&~(RTA_ALIGNTO-1))
#define RTA_LENGTH(len) (RTA_ALIGN(sizeof(struct rtattr))+(len))
#define RTA_OK ...
#define RTA_NEXT ...
等等

这些宏的用法和确切含义我也知道,但是不知道为什么要用它?
比如RTA_ALIGN返回一个大于等于len且能被4整除的数,为什么要把传给它的结构体的长度转化成一个能被4整除的数呢?

如果说RTA_ALIGN宏的参数是个地址,那还能理解,把该地址转成4字节对齐。

同样,struct nlmsghdr结构体也有一组对应的宏。


为什么每个结构体后面跟着的数据都要放在 把该结构体长度转化为能被4整除的地方,而我调用recv收到的每个消息的第一个结构体并没有按4对齐,因为我传递的char数组。

|
为了获取更好的性能吧。
内存是由一个一个的内存单元组成的,
不对齐的数据,可能刚好跨过两个内存单元的边界,这样访问的时候,硬件就就需要访问两个内存单元的数据才能得到这个结构的内容,就慢了。典型的还会导致cache命中率地下,影响性能,应该这x86这些硬件底下的实现细节有关。   不过可以知道的事实是不对齐影响是比较大的,所以大家才这么搞了。一般来说编译器是会自己会对齐优化结构的,但这些都是直接放到网络包里面去的,偏移容易偏好,他定义这些宏可能是为了控制更好吧。

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 遇到这个错误没有?
  • 我在用resin做标签库时遇到问题,请大家帮忙。
  • 进程的调用造成的存储分配中遇到的问题??来者有分
  • 求助,安装redhat 9.0遇到问题
  • 初写MAKEFILE遇到问题,麻烦大家帮忙。
  • 基于mssql导mysql遇到的问题
  • 我用smartupload组件遇到问题了,请帮忙!!
  • !!!初学Java,遇到一个奇怪问题,请大家回答!!!
  • 画图函数中遇到“平面上点到直线的距离”公式是什么?急!
  • 初学unix编程遇到的一个问题?
  • 装linux遇到问题,有高手在线帮忙吗?请发信息给我
  • HTML标签参考手册 iis7站长之家
  • 调试JSP遇到的问题,高分求解
  • 同仁遇到 char (* variable)[260],何意? 牛人帮忙呀!!
  • 初用mandrake liunix,遇到了很多乱码。
  • gdb调试X窗口应用程序遇到的难题
  • 新手遇到一个怪问题,十万火急!!!
  • 在遍历目录的情况下如果遇到符号连接…………
  • linux分区时遇到的问题
  • 装VMware+RH9,遇到Updating etc/fstab错误


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3