2011-09-21 4 views
0

나는 다음과 같이 사용자 정의 메모리 할당을 만들 누출. 따라서 boost::shared_ptr을 사용합니다.C는/C++ 사용자 정의 할당 메모리는

그러나 VS2008에서 실행 한 후 메모리 누수를 감지합니다. 나는 이유를 모른다. 을 MemoryChunks으로 변경하면 메모리 누수가 사라집니다.

+0

MemoryChunks는 청크의 배열과 비슷하며 각 청크에는 객체 배열이 포함되어 있으며 다음 자유 객체에 대한 ptr이 포함되어 있습니다. 청크가 삭제되지 않으면 객체가 해제되지 않습니다. allocate/free는 O (1)을 의미합니다. 메모리 청크가 삭제되면 모든 청크가 해제됩니다. –

+0

'MemoryChunk'의 정의를 게시하고 가능한 경우 할당 자 자체를 구현하는 것이 좋습니다. 리 빙을 제대로 처리하고 있습니까? 컨테이너에 기본 구성된 할당자를 제공하면 그냥 작동합니까? 등등 ... –

+0

@ K-ballo 감사합니다. 할당자는 다른 라이브러리의 일부입니다 : [pool_allocator_stl] (http://drdobbs.com/cpp/184406243). boost :: shared_ptr을 사용하여 새로운 보류 정책을 추가합니다. 기본 보유 정책을 사용하는 경우 스택에서 메모리 누수가 감지되지 않습니다. –

답변

0

할당자는 C++ 03에서 무국적으로 처리됩니다. Boost.Containers와 함께 할당자를 사용해보십시오 (그냥 받아 들였습니다 만, 그들은 이미 Boost.Interprocess의 일부라고 생각합니다). 이것은 할당자를 존중합니다. MemoryChunks에 대한 정의가없는 다른 말은 쉽지 않습니다.

+0

MemoryChunks는 청크의 배열과 같으며, 각 청크는 객체 배열을 포함하고 다음 자유 객체에 대한 ptr을 포함합니다. 청크가 삭제되지 않으면 객체가 해제되지 않습니다. allocate/free는 O (1)을 의미합니다. 메모리 청크가 삭제되면 모든 청크가 해제됩니다. –