返回信息流看到第二章,sgi的空间配置器,没看出free链表用union有什么好处,我理解用一个结构体指针就行了,但是网上和书上都说有用。各位能指点指点么?
我拉了一份sgi stl源码,搜了一下,发现union里面的char client_data[1];变量,除了定义外,并没有任何地方用到了这个变量。
这是一条镜像帖。来源:北邮人论坛 / cpp / #99726同步于 2020/1/17
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
《stl源码剖析》内存链表的union问题
xiaobing307
2020/1/17镜像同步4 回复
订阅后,新回复会通过你的通知中心匿名送达。
4 条回复
说下自己的愚见:
应该不能说有没有用,看是怎么写。
这么实现更优美一点?
那么书本上那么实现,
注释也说了,/*the client sees this*/,就是为了让程序员读起来知道 客户可以像从一级配置器里得到的char * 或者void *内存块 那样使用二级配置器得到的内存块那样使用内存,
它不仅仅是一个内部维护链表的一个指针,更加是客户可读写的内存
不需要像普通单链表那样有指针域和值域(额外消耗内存存储用于管理链表的指针域)。
为什么分配时,最低分配8字节 或者 需要向上提升为8的倍数?
一部分原因也是受限于这么实现的,因为联合体里,用的指针就是8字节(64位),把这块存指针的内存返回个客户,客户用或者不用都已经给了8字节,同理向上提升为8字节也是由于指针偏移也是按照8的倍数进行增长。
那能否打破8的倍数限制?
可以,但是不能这么实现了,需要按照 指针域 + 内存块 那样进行管理,只是额外消耗内存进行管理用。