Multi-Thread에서의 동적할당.

sozu의 이미지

서버를 개발하는데요.^^

멀테스레딩을 하고 있습니다.

동적 자료구조를 수시로 할당하고 해제 해야 하는 상황입니다.

일단

C++ Run-time Lib.에 있는 new, delete로 했는데

약 2000개의 클라이언트가 붙으니까 메모리 참조 오류를 남기고 전사하더군요

두번째는

Windows에서 제공하는 Heap-, Virtual- 관련 함수들을 사용했는데

약 5000개 이상 까지 잘 버티더군요...끝내 죽지 않았습니다.(클라이언트를 늘릴수 없기에;;)

세번째는

제가 짰습니다. 동적 자료구조를 풀링하는 메모리 관리자를 만들었죠.

일단 두번째꺼보다 성능을 좋게 하기 위해 만든겁니다.

이것도 잘 버티었습니다.

두번째와 세번째는 Serialization을 지원합니다.

첫번째 실험에서 죽은 이유를

어떻게 설명할수 있는지 알려주셨으면 합니다.

혹은 제 실험에서 헛점이 있다면 알려주셨으면 합니다^_^

Necromancer의 이미지

malloc()은 thread-unsafe한 걸로 알고 있는데

new나 delete도 내부적으로는 malloc()을 쓸테고

Written By the Black Knight of Destruction

pynoos의 이미지

흑기사 wrote:
malloc()은 thread-unsafe한 걸로 알고 있는데

new나 delete도 내부적으로는 malloc()을 쓸테고

Windows가 그렇단 말씀이시죠? glibc 에는 mutex가 들어 있는데..

아래소스는 대충 검색한 url 입니다.

http://www.mit.edu/afs/sipb/project/gcc-3.2/share/glibc-2.3.1/malloc/malloc.c