많은 반복적 인 짧은 문자열을 저장하고 조작하는 시스템을 구현하고 있습니다. 예를 들어 주식 시리즈. (이에 MSFT 같은짧은 문자열을위한 부스트 플라이 웨이드
<time1>,MSFT,60.01
<time2>,MSFT,60.02
<time3>,MSFT,60.00
내가 메모리 할당, 문자열 검색/비교/그 작은 반복적 인 시세 이름의 복사 비용을 최적화 할 수 Boost::Flyweight
를 사용하여 생각하고 : 나는 마이크로 소프트 주가의 반복적 인 항목을 많이해야합니다 케이스).
하지만 그 문자열은 처음에는 꽤 작습니다. 대개 단지 몇 바이트입니다. 긴 유형은 현대 컴퓨터에서 이미 8 바이트입니다. 이 경우 Boost::Flyweight
을 사용하는 것이 가치가 있습니까?
Boost::Flyweight
에 대한 나의 이해는 성능 향상을 위해 내부화 된 문자열이 정수라는 것입니다. 하지만 8 바이트 문자열을 조회/비교/복사하는 것은 8 바이트 길이의 데이터 형식에서 작동하는 것과 크게 다를 것이라고 생각합니다. 따라서 Boost::Flyweight
으로 이동하는 것은 가치가 있습니까?
내 주요 목표는 속도 최적화 측면에서 메모리 최적화 측면과 반대입니다. 하나를 선택해야합니다.
몇 가지 생각이 떠오른다 : 1) 내가 부스트의 구현에 익숙하지 않은,하지만 난이 플라이급 같은 느낌
UPDATE 그냥 내가 나스닥 종목에 대한 완벽한 해싱을 사용하여 만든이 관련 데모를 기억 패턴은 주로 메모리 절약을위한 것이지 스피드가 아닙니다. 2) 캐시 위치를 잊지 마라. 플라이급은 "로컬"로 작업하는 다른 모든 것보다 메모리의 다른 부분에있을 가능성이 거의 있습니다. 즉, 캐시 누락을 의미합니다. 3) 컴파일러가 충분히 새로운 경우 작은 문자열 최적화를 받아야합니다. 즉, 스택이 충분히 짧으면 문자열을 할당합니다. 그것은 플라이급보다 큰 차이를 만들 수 있습니다. 하지만 확신하기 위해 몇 가지 테스트를 실행해야합니다. – 0x5453
@ 0x5453에 동의합니다.이 특별한 경우 NUL 종료 문자 배열 (예 :'std :: array')로 문자열을 저장하면 성능이 가장 좋을 수 있습니다. 물론 그것은 할당의 규모에 따라 다릅니다 –
sehe
@ 0x5453 답장을 보내 주셔서 감사합니다. 나는 이것이 답이 아닌 주석이어야한다고 생각한다. :) – CodeNoob