system에서 따로 small memory allocator 전용의 memory allocation function을 제공한다거나 할 경우에는 operator new (new에 대한 이름이 두 가지였었는데, 기억이 잘 안남 -_-;; effective C++에서 봤는데.. C++ 쓴지 오래되서.. mastercho님이 대답해 주실겁니다. ^^;;;) 를 재정의해서 그 allocator를 쓰도록 할 필요도 가끔 있습니다.
libiberty (GCC나 GDB 소스에 포함되어 있음) 라이브러리에 보면 이런 목적으로 쓸 allocator가 obstack 또는 alloca가 있는데, (C 용입니다) 가끔 이 allocator를 쓰기도 합니다. C++에서도 new가 메모리를 할당할 때 이런 allocator를 쓸 수 있도록 만들 수 있을 것 같군요. 한번 해 보시길..
new는 객체의 생성자를 자동으로 호출하고delete는 소멸자를 자동
new는 객체의 생성자를 자동으로 호출하고
delete는 소멸자를 자동으로 호출합니다.
C++ 객체에 malloc/free를 사용하면 객체가 제대로 생성/소멸되지 않으므로
런타임 에러를 유발하게 됩니다. 절대 사용하지 마세요.
아.. 글쿤요...
그런 결정적인 차이가 있네요.
감사합니다.
근데 제가 물어보고 싶었던건
클래스의 인스턴스를 만들때가 아니구요,
일반 구조체의 경우이거든요.
일반 구조체의 경우에는 차이가 없나요?
개념없는 초딩들은 좋은 말로 할때 DC나 웃대가서 놀아라. 응?
C++에서는 구조체도 클래스입니다.
역시 new/delete를 사용하시는게 좋을것 같습니다.
Mayer의 Effective시리즈 책이 이 부분에 대해서는 아주 좋은 책이며, 번역본도 있습니다.
C++에서는 malloc/free는 없다고 치는 것이 좋습니다. 굳이 쓸
C++에서는 malloc/free는 없다고 치는 것이 좋습니다. 굳이 쓸 이유가 전혀 없습니다.
Re: 아.. 글쿤요...
C++ 는 struct 와 class 가 디폴트 접근 권한이 각각 public, private
인 것 말고는 차이가 없으므로, 일단 class 와 차이가 없습니다.
단, 다음과 같은 테크닉은 new로는 금기시되므로, 이런 류의
코딩을 C++ 에서 하려면 malloc 을 쓰는 게 좋습니다.
Orion Project : http://orionids.org
C++의 기본적인 책이면 항상 malloc과 new를집고 넘어가는
C++의 기본적인 책이면 항상 malloc과 new를
집고 넘어가는데요
C++ 기본 책 한권 정독하시길 추천 드립니다 --;
승자는 자기보다 우월한 사람을 보면 존경심을 갖고 그로부터 배울 점을 찾지만 패자는 자기보다 우월한 사람을 만나면 질투심을 갖고 어디 구멍난 곳이 없는지 찾는다.
- 하비스
따로 malloc(3)을 쓸 이유는 없습니다만,system에서 따
따로 malloc(3)을 쓸 이유는 없습니다만,
system에서 따로 small memory allocator 전용의 memory allocation function을 제공한다거나 할 경우에는 operator new (new에 대한 이름이 두 가지였었는데, 기억이 잘 안남 -_-;; effective C++에서 봤는데.. C++ 쓴지 오래되서.. mastercho님이 대답해 주실겁니다. ^^;;;) 를 재정의해서 그 allocator를 쓰도록 할 필요도 가끔 있습니다.
libiberty (GCC나 GDB 소스에 포함되어 있음) 라이브러리에 보면 이런 목적으로 쓸 allocator가 obstack 또는 alloca가 있는데, (C 용입니다) 가끔 이 allocator를 쓰기도 합니다. C++에서도 new가 메모리를 할당할 때 이런 allocator를 쓸 수 있도록 만들 수 있을 것 같군요. 한번 해 보시길..
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://cinsk.github.io/cfaqs/
[quote]effective C++에서 봤는데.. C++ 쓴지 오래되서
힙메모리에다가 new로 매번 할당할경우
상당한 오버헤드 [힙 할당의 오버헤드는 상당한거 같더군요] 를 유발하는데
operator new 재정의해 자기만의 메모리를 할당해 쓰는 경우 커널 함수 호출할 필요도 없이
자기 유저 메모리에 할당해놓은 자기 메모리에서
빠르게 할당받을수 있는 기법입니다
effective C++에서 이 기법을 소개 했지만
전혀 쓸 이유는 없다고 보고요
[쓰려다 보니 ,쓸때없이 클래스만 복잡해 지더군요]
차라리 boost 라이브러리에 메모리 풀을 쓰는것을
강력히 추천합니다
이것도 마찬가지 효과를 가지는데
훨씬더 유연하게 쓸수 있습니다
또한 기억이 가물한데 내부에서 vector를 사용해서
자동으로 메모리도 확장시켜주기도 하더군요
effective C++에서 소개한 방법을 쓰는것보다
이 라이브러리를 쓰는게 훨씬더 세련되고 유용한
방법입니다
자세한 설명은 길어질테니 boost 홈페이지의
레퍼런스를 참고 하시고요 :)
참고로 말씀드리자면 아마도 new를 오출하면
객체크기만큼 malloc으로 메모를 할당받은 다음에 객체의 생성자를
호출해 초기화 하는 방식일겁니다
승자는 자기보다 우월한 사람을 보면 존경심을 갖고 그로부터 배울 점을 찾지만 패자는 자기보다 우월한 사람을 만나면 질투심을 갖고 어디 구멍난 곳이 없는지 찾는다.
- 하비스
댓글 달기