stl map의 메모리 관리 , 동기화
글쓴이: hwandori / 작성시간: 화, 2004/11/23 - 4:41오후
서버/클라이언트 프로그램에서 서버가 클라이언트 당 가지고 있을수 있는
정보를 저장하기 위해서 client socket descriptor를 Key로 하고 나머지
정보를 구조체로 정의한 변수를 value로 한 Map을 정의하고 있습니다.
멀티 쓰레드 프로그램으로 되어있으며 새로운 클라이언트가 들어왔을때
Map에 정보를 추가 합니다.
쓰레드가 종료할 때 Map에서 정보를 삭제해야 하는데 만약 삭제 하지 않는
다면 계속해서 Map의 메모리가 늘어가나요?
만약 삭제를 꼭 해야한다면 동기화는 직접해줘야 하는지 궁금합니다.
Map이 rb_tree로 되어있다는 것 외에는 내부구조를 몰라서 어떻게
해야할지 궁금합니다.
Forums:
쓰레드를 사용하신다면Map 사용하기 전에 mutex 거시고사용한다
쓰레드를 사용하신다면
Map 사용하기 전에 mutex 거시고
사용한다음 풀면됩니다.
내부 구조는 알지 못해도 삭제가 가능합니다.
erase 함수등을 살펴보세요
---
http://coolengineer.com
답변 감사합니다. 혹시 map의 메모리 관리가 어떤식으로 이루어지는지 알
답변 감사합니다. 혹시 map의 메모리 관리가 어떤식으로 이루어지는지 알수가 있을까요?
http://gcc.gnu.org/libstdc++/요걸 말씀하시
http://gcc.gnu.org/libstdc++/
요걸 말씀하시는것인지요..? :0
---
http://coolengineer.com
.
맵의 value type이, new로 생성한 포인터로 넣는게 아니라면 쓰레드 종료될때 map template class의 소멸자가 호출되어 알아서 메모리가 정리되지요.
다만, 복사생성자가 추가로 호출되기땜에 정리에 신경은 안써도 되지만 new로 넣는것보다 오버헤드는 있다고 봐야겠네요.
value type을 포인터로 하고 정리를 잘 하는방식이 나을것 같습니다.
그것은 map 의 erase와 무관하게 멤버의 value(pointer) 를 불러와서 delete 해줘야겠지요.
모두 감사드립니다....
모두 감사드립니다....
댓글 달기