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

Memory management kmalloc是否调用类型构造函数?,memory-management,linux-kernel,kmalloc,Memory Management,Linux Kernel,Kmalloc,众所周知,使用new的内存分配调用各自的类型构造函数,而使用malloc的内存分配则不调用。但是卡马尔科呢 我正在尝试开发一些系统调用,我需要为下面的结构分配内存 struct mailbox{ unsigned long existing_messages; unsigned long mxid; struct message *msg; struct message *last_node; mailbox(){ existing_mes

众所周知,使用new的内存分配调用各自的类型构造函数,而使用malloc的内存分配则不调用。但是卡马尔科呢

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

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等效的函数?

kmalloc不调用构造函数

P> > C++中的一种方法是调用“放置新”。 例如:

void*ptr=malloc(sizeof(T))

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

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

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

免费(ptr)//空闲内存


等等,你在Linux内核中使用C++吗?C语言中没有构造函数。你的代码甚至不应该编译!在内核主make文件中,我看到一行HoSTCXXX=G++HoxCXFLAGS=-O2,这意味着当内核编译它能够编译C++代码时,我是对的吗?如果我错了,请纠正我。我非常怀疑你会有多大的成功。。。当然,你也许能把它编译出来,但我怀疑你能从中得到什么有用的东西。内核不支持C++运行时AFAIK。