c++ 동적할당된 메모리 자동 해제
글쓴이: auditory / 작성시간: 수, 2011/02/23 - 5:32오후
new 로 alloc된 메모리를 특정시점에 자동으로 모두 delete시킬 수 있는 방법이 있을까요?
main() { func1(); func2(); }
와 같은 코드에서 func1 안에서 new로 메모리를 많이 alloc시킨후에 free하지 않고 종료합니다.
이때 func2를 시작하기 전에 이전에 new로 할당된 메모리를 모두 자동으로 해제하려고 합니다.
가장 간단한 방법이 어떤게 있을까요??
func1의 소스도 모두 가지고 있습니다만,
직접 고치기에는 너무 복잡한 상황입니다.
Forums:
Effective C++ 3판 항목 49~51
사용하시는 compiler의 문서를 자세히 읽는 것은 덤입니다.
별수없이
전역 new 오퍼레이터를 오버로딩 해야 할듯 싶네요...
현재까지 고려중인 방법으로는 다른분들께서
현재까지 고려중인 방법으로는
다른분들께서 말씀하신대로
1. new를 overloading해서 할당된 주소와 크기를 모두 저장했다가, 나중에 해제하는 방법
2. 미리 메모리풀을 만들고, new를 overloading해서 메모리 풀안에서 할당하도록 한후,
함수 종료후 메모리풀을 해제하는 방법
을 고려하고 있습니다..
1번보다는 2번이 간단할것 같은데요..
전역 new를 이런식으로 overloading하는 것이 가능할까요?
가능이야 하겠습니다만...
어떤 형태로도 말이죠. 내부에서 hacking을 하면 안 될 것은 없겠죠. 하지만 까다롭고, 문제없이 만들려면 여러가지로 고민을 해야 합니다.
더 큰 문제는 잘못된 설계가 유지되고, 더 악화될 가능성도 있습니다.
단기적으로 memory 누수를 확인한다던가 그런 것이 아니라면 추천하고 싶지는 않네요.
smart pointer 를 사용해보세요. func1
smart pointer 를 사용해보세요. func1 이 종료되는 시점에 정리가 되도록 할 수 있습니다.
Neogeo - Future is Now.
smart pointer 사용에 한표 던집니다.
operator new/delete overloading을 thread safe 하게, dead-lock 없이 작성하려면 설계와 검증에 상당한 공을 들여야 할 겁니다.
func1 에서 동적 할당되는 부분들을, boost::shared_ptr와 같은 검증(?)된 smart pointer로 교체하는 것이 여러 모로 안전(?)합니다.
프로그램을 나눈 다음에 둘 사이에 통신 방법을
프로그램을 나눈 다음에 둘 사이에 통신 방법을 고려해보는 것은 어떨까요?
파이프, 공유메모리 등등...
자원 해제는 OS에 맡겨놓구요...
내 블로그: http://unipro.tistory.com
댓글 달기