예전에 누군가를 통해서 VC++ hash_map이 느리다라는 말을 들은 적이 있었지만 그 당시에는 FreeBSD에서 개발하고 있어서 설마?’라는 생각만 하고 끝냈습니다.

 

시간이 지난 후 VC++hash_map이 느리다라는 말을 잊고 있었는데 근래 GPGStudy에서 다시 느리다라는 말이 언급 되었고, ‘온라인 서버제작자 모임커뮤니티에서 풍이님이 손수 테스트한 결과를 코드와 같이 올려주셨고(http://cafe.naver.com/ongameserver/3619 ), VC hash_map이 느린가에 대해 주말에 웹 서핑을 통해서 관련 글을 보았습니다(http://minjang.egloos.com/1983788

, http://junyoung.tistory.com/1 ).

 

오늘 출근 후 바로 직접 테스트 해 보았습니다. VS 2008 SP1에서 추가된 TR1 unordered_map도 추가했습니다.

테스트 환경은 Windows 2008 Server 64bit, Visual Studio 2008 Pro SP1 입니다.

 

결과는 CAtlMap이 가장 빠르고, STL hash_map은 생각보다 느리고, 특히 TR1 unordered_map은 너무 느렸습니다.

VC hash_map gcc hash_map 보다 느리다고 하니 VC++ TR1 보다도 boost unordered_map이 더 빠르지 않을까 라는 생각을 합니다. 혹시 이거 테스트 가능한 분들은 테스트 부탁합니다.

 

백 마디의 말보다 하나의 코드가 더 좋습니다. ^^

테스트한 코드도 올리니 틀린 부분이 있으면 말로만 이야기 하지 마시고 직접 코딩을 하여 결과를 트랙백으로 보여 주시면 고맙겠습니다.


사용자 삽입 이미지

사용자 삽입 이미지
사용자 삽입 이미지

추가 :

오규태님이 boost의 unordered_map을 사용한 결과를 알려주셨습니다.

결론은 boost의 unordered_map은 빠릅니다. 단 CAtlMap보다는 느립니다.

 

hash insert : 494
hash loop : 94
hash search : 78
hash erase : 118

unordered_map insert : 256
unordered_map loop : 7
unordered_map search : 40
unordered_map erase : 39

list insert : 222
list loop : 8

map insert : 512
map loop : 19
map search : 265
map erase : 355

atl insert : 59
atl loop : 9
atl search : 20
atl erase : 46



신고
by 흥배 2009.03.21 13:07