2009년 6월 23일 화요일

[C] new와 malloc의 차이점


nothing 님이 2004년 04월26일 18시 52분에 쓰신 글입니다.

제목 : new로 메모리잡을때 초기화~!
내용 : new 와 malloc의 개념을 잘 모르시는군요

일반적으로 new로 할당된 메모리는 memset으로 초기화 하면 안됩니다.
new로 할당된 메모리는 생성자에서 초기화하고 소멸자에서 뒷정리를 해야합니다.

new 는 연산자이고(+ - * /같은 연산자) malloc은 함수 입니다.
일반인들은 new도 함수라고 생각하는데 꼭 기억하세요 new는 연산자입니다.
더불어 sizeof도 연산자임을 기억하세요

new 는 인수로 넘어온 클래스 타입의 객체를 생성해줍니다. //중요!
malloc은 인수로 넘어온 크기 만큼의 메모리 블럭을 잡아줍니다.(할당) //중요!

개념이 약간 다른데 깊이 있게 들어가 보면,

malloc은 커널에게 메모리 할당 요청을 하고 커널은 메모리 블럭의 일부분을

다른곳에서 접근 할수 없게 예약을 하고 그메모리의 시작주소를 넘깁니다.

이 시작주소가 malloc이 리턴하는 값입니다.

따라서 malloc이 넘겨준 메모리에는 쓰레기 값이 들어 있으므로 memset등의 함수를 사용해서 초기화를 해주어야 하고,

'->'연산자나 '.' 연산자를 사용할수 없습니다.(객체의 의미가 없으므로)

new 는 메모리를 할당하면서 '클래스에서 정의된대로' 메모리를 초기화 하고 객체를 사용할수 있는 환경을 만들어 줍니다.

예약만하는것이 아니라 예약 + 클래스에 맞는 객체로 생성 시켜주는 겁니다.
(물론 이런한 객체화 작업은 생성자와 소멸자에서 코딩해야 합니다.)

신이 흙으로 사람을 만들때 그 코에 생기를 불어 넣는게 new 연산자입니다.

사람이 흙으로 인형을 만들어 생기를 못 불어 넣는게 malloc입니다.

따라서 new로 할당한 메모리에 memset을 사용하면 그 생기를 지우는 행위입니다.

new delete는 연산자이고 malloc free는 함수입니다.

그럼

댓글 1개:

  1. trackback from: CR7Ronaldo의 생각
    [C] new와 malloc의 차이점 nothing 님이 2004년 04월26일 18시 52분에 쓰신 글입니다. 제목 : new로 메모리잡을때 초기화~! 내용 : new 와 malloc의 개념을 잘 모르시는군요 일반적으로 new로 할당된 메모리는 memset으로 초..

    답글삭제