2014-09-08 2 views
0

new을 사용한 메모리 할당이 malloc 인 각 유형 생성자 및 메모리 할당을 호출하는 것으로 알려져 있습니다. 그러나 kmalloc은 어떨까요?kmalloc 유형 생성자를 호출합니까?

일부 시스템 호출을 개발하려고하는데 메모리를 아래 구조에 할당해야합니다. 내가 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; 
    } 
}; 

그것은 할당 시간에 구조체 사서함에 대한 생성자를 호출 할 것인가? 생성자를 명시 적으로 제외하고 이라는 생성자를 얻을 수있는 합리적인 가능한 방법은 무엇입니까? 커널에 메모리 할당을 위해 과 같은 함수가 있습니까?

+0

잠깐, 어떻게 리눅스 커널에서 C++을 사용하고 있습니까? C에서 생성자와 같은 것은 없습니다. 코드가 컴파일되지 않아야합니다! – tangrs

+0

커널 메인에서 파일을 만들었습니다 ** HOSTCXX = g ++ HOSTCXXFLAGS = -O2 ** 이것은 커널 컴파일시 C++ 코드를 컴파일 할 수 있음을 의미합니다. 내가 틀렸다면 나를 바로 잡아주세요. – user3508953

+0

나는 당신이 많은 성공을 거둘 것인지 의심 스럽다. 물론, 컴파일 할 수는 있지만, 쓸모없는 것을 얻을 수는 없을 것이다. 커널은 C++ 런타임 AFAIK를 지원하지 않습니다. – tangrs

답변

1

kmalloc가 생성자를 호출하지 않습니다.

C++의 한 가지 방법은 "placement new"를 호출하는 것입니다.

예 :

공극의 PTR = *의 malloc (sizeof 연산자 (T));

T * p = new (ptr) T(); // 메모리에

메모를 객체를 생성 : 당신은 객체에 를 자체 메모리 누수를 방지하기 위해 명시 적으로 소멸자를 호출해야하고이 메모리에 대응 해제 할당 루틴을 호출합니다.

p-> ~ T(); // 소멸자를 호출

무료 (ptr); // 무료 메모리

관련 문제