免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1877 | 回复: 0
打印 上一主题 下一主题

关于Object Descriptor的疑问? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-05-27 15:17 |只看该作者 |倒序浏览
下面是一段objects注释
/* memory layout of objects:
* 0                : objp
* 0 .. cachep->dbghead - BYTES_PER_WORD - 1: padding. This ensures that
*                 the end of an object is aligned with the end of the real
*                 allocation. Catches writes behind the end of the allocation.
* cachep->dbghead - BYTES_PER_WORD .. cachep->dbghead - 1:
*                 redzone word.
* cachep->dbghead: The real object.
* cachep->objsize - 2* BYTES_PER_WORD: redzone word [BYTES_PER_WORD long]
* cachep->objsize - 1* BYTES_PER_WORD: last caller address [BYTES_PER_WORD long]
*
/

下面的代码可以体现对上面注释的应用,
static unsigned long *dbg_redzone1(kmem_cache_t *cachep, void *objp)
{
    BUG_ON(!(cachep->flags & SLAB_RED_ZONE));
    return (unsigned long*) (objp+obj_dbghead(cachep)-BYTES_PER_WORD);
}

static unsigned long *dbg_redzone2(kmem_cache_t *cachep, void *objp)
{
    BUG_ON(!(cachep->flags & SLAB_RED_ZONE));
    if (cachep->flags & SLAB_STORE_USER)
        return (unsigned long*) (objp+cachep->objsize-2*BYTES_PER_WORD);
    return (unsigned long*) (objp+cachep->objsize-BYTES_PER_WORD);
}

static void **dbg_userword(kmem_cache_t *cachep, void *objp)
{
    BUG_ON(!(cachep->flags & SLAB_STORE_USER));
    return (void**)(objp+cachep->objsize-BYTES_PER_WORD);
}


这里我就奇怪了,
1.为什么objects会有这样的安排?为什么不用一个固定的数据结构去描述。却只是在注释中说明OBJECT的MEMORY LAYOUT。
画个图吧,如图示


2.这里我发现它们的偏移标识以dbg起头,如
dbghead
,
那么是否意味着只是在调试中OBJECTS使用这个拓扑结构。

[ 本帖最后由 fineamy 于 2007-5-27 15:35 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP