0

众所周知,使用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等效的功能?

4

1 回答 1

2

kmalloc 不调用构造函数。

C++ 中的一种方法是调用“placement new”。

例子:

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

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

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

p->~T(); //调用析构函数

免费(ptr);//释放内存

于 2014-09-08T03:33:26.963 回答