LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 665|回复: 0

求教一个内存地址的问题

[复制链接]
发表于 2004-4-7 09:39:18 | 显示全部楼层 |阅读模式
下面是linux内核进程通信部分的源代码:
struct msg_msg {
        struct list_head m_list;
        long  m_type;         
        int m_ts;           /* message text size */
        struct msg_msgseg* next;
        /* the actual message follows immediately */
};
static struct msg_msg* load_msg(void* src, int len)
{
        struct msg_msg* msg;
        struct msg_msgseg** pseg;
        int err;
        int alen;

        alen = len;
        if(alen > DATALEN_MSG)
                alen = DATALEN_MSG;

        msg = (struct msg_msg *) kmalloc (sizeof(*msg) + alen, GFP_KERNEL);
        if(msg==NULL)
                return ERR_PTR(-ENOMEM);

        msg->next = NULL;

        if (copy_from_user(msg+1, src, alen)) {
                err = -EFAULT;
        }
。。。。。。
}
我不明白的是:
kmalloc分配出一块内存连续空间,msg结构体里面的各数据在这片连续空间里是怎么分布的啊?
msg的值是kmalloc分配的内存连续空间的首地址吧,msg+1也就是这片连续空间的第二个字节了,为什么要把src的内容复制到以msg+1为首地址的内存空间呢?连续空间的第一个字节里面装的又是什么呢?


肯请大虾帮忙解答一下
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表