当前位置: 技术问答>linux和unix
为什么是entry->prev = LIST_POISON2而不是entry->prev = NULL?
来源: 互联网 发布时间:2016-10-21
本文导语: 为什么在定时器的双向循环链表中,表示一个结点为空的时候用:entry->prev = LIST_POISON2; 为什么不用:entry->prev = NULL;呢? LIST_POISON2是这样定义的: /* * These are non-NULL pointers that will result in page faults * und...
为什么在定时器的双向循环链表中,表示一个结点为空的时候用:entry->prev = LIST_POISON2;
为什么不用:entry->prev = NULL;呢?
LIST_POISON2是这样定义的:
/*
* These are non-NULL pointers that will result in page faults
* under normal circumstances, used to verify that nobody uses
* non-initialized list entries.
*/
#define LIST_POISON1 ((void *) 0x00100100)
#define LIST_POISON2 ((void *) 0x00200200)
为什么不用:entry->prev = NULL;呢?
LIST_POISON2是这样定义的:
/*
* These are non-NULL pointers that will result in page faults
* under normal circumstances, used to verify that nobody uses
* non-initialized list entries.
*/
#define LIST_POISON1 ((void *) 0x00100100)
#define LIST_POISON2 ((void *) 0x00200200)
|
英文写的很清楚
为了防止有的节点申请内存错误的时候也是NULL
使用不可能被初始化的指针当作标记
而0x00200200 这样的低地址是内核空间申请内存不会出现的地址
可以拿来当标记
为了防止有的节点申请内存错误的时候也是NULL
使用不可能被初始化的指针当作标记
而0x00200200 这样的低地址是内核空间申请内存不会出现的地址
可以拿来当标记
|
呵呵,这么说0xA0000000以下的地址都可这么用啦?一楼翻译非常准确。只是还是搞不明白是内存物理地址还是程序逻辑地址,
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。