kmalloc是否调用了类型构造函数?

时间:2014-09-08 03:25:30

标签: memory-management linux-kernel kmalloc

众所周知, new 的内存分配调用各自的类型构造函数,而 malloc 的内存分配则不会。但是kmalloc呢?

我正在尝试开发一些系统调用,我需要将内存分配给下面的结构。

struct mailbox{
    unsigned long existing_messages;
    unsigned long mxid;
    struct message *msg;
    struct message *last_node;
    mailbox(){
        existing_messages = 0;
        mxid = 0;
        msg = NULL;
        last_node  = NULL;
    }
};

如果我使用 kmalloc 分配内存,它会在分配时调用 struct mailbox 的构造函数吗?如果没有,那么获得构造函数的合理可能方法是什么?除了显式调用构造函数。内核中的内存分配是否有与 new 等效的功能?

1 个答案:

答案 0 :(得分:1)

kmalloc没有调用构造函数。

C ++中的一种方法是调用"放置新的"。

示例:

  

void * ptr = malloc(sizeof(T));

     

T * p = new(ptr)T(); //在内存中构造对象

请注意: 你需要显式调用析构函数以避免对象本身的内存泄漏, 然后为该内存调用相应的解除分配例程。

  

对 - >〜T(); //调用析构函数

     

免费(PTR); //免费记忆