众所周知, 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 等效的功能?
答案 0 :(得分:1)
kmalloc没有调用构造函数。
C ++中的一种方法是调用"放置新的"。
示例:
void * ptr = malloc(sizeof(T));
T * p = new(ptr)T(); //在内存中构造对象
请注意: 你需要显式调用析构函数以避免对象本身的内存泄漏, 然后为该内存调用相应的解除分配例程。
对 - >〜T(); //调用析构函数
免费(PTR); //免费记忆