免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12345678
最近访问板块 发新帖
楼主: Godbach

Linux内核中的红黑树 [复制链接]

论坛徽章:
0
发表于 2012-09-03 10:05 |显示全部楼层
struct rb_root只是struct rb_node*的一个包装,这样做的好处是看起来不用传递二级指针了。不错,很简单。再看一下下面几个重要的宏,细心的你一定会发现,rb_parent_color其实没那么简单,Andrea Arcangeli在这里使用了一个小的技巧,不过非常棒。正如名字所暗示,这个成员其实包含指向parent的指针和此结点的颜色!它是怎么做到的呢?很简单,对齐起了作用。既然是sizeof(long)大小的对齐,那么在IA-32上,任何rb_node结构体的地址的低两位肯定都是零,与其空着不用,还不如用它们表示颜色,反正颜色就两种,其实一位就已经够了。

重点看到了这里.  之前不知道的.

sizeof(long)  使指针的低两位在 IA-32 上为0. 那么其他的体系结构上是否也符合呢? 大端与小端都OK? 还请解惑. 谢谢!

ps:
在那里都可以看到 LZ(GodBach) 的帖子和回帖. 强大的存在.

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
发表于 2012-09-04 09:37 |显示全部楼层
回复 71# hk2305621

sizeof(long)  使指针的低两位在 IA-32 上为0. 那么其他的体系结构上是否也符合呢? 大端与小端都OK? 还请解惑. 谢谢!

这个地方感觉应该和体系结构无关的吧,作者代码实现就完全没有涉及到 ARCH,而且这些接口在内存管理等地方都直接调用了。
   

论坛徽章:
0
发表于 2012-09-04 21:50 |显示全部楼层
回复 72# Godbach

不过想想也是, 大小端是在内存中的存储形式, 对于 long 在程序中的表现而言, 最低位还是 long & 0x01. 和大小端无关了.

斑竹分享下你的 Linux 进阶道路吧, 我最近比较迷茫. 先谢谢了!呵呵
   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP