스택에 작은 문자열 (특정 임계 값까지)에 메모리를 할당하는 STL 인터페이스 호환 문자열 클래스와 큰 문자열에 대한 힙이 있는지 알고 있습니까?작은 문자열에 대해 스택에 문자열 클래스를 할당합니까?
나는 프로그램을 최적화하려고하는데, 힙에 할당되는 대신 스택에 쉽게 들어갈 수있는 작은 로컬 문자열을 많이 사용하고있다.
스택에 작은 문자열 (특정 임계 값까지)에 메모리를 할당하는 STL 인터페이스 호환 문자열 클래스와 큰 문자열에 대한 힙이 있는지 알고 있습니까?작은 문자열에 대해 스택에 문자열 클래스를 할당합니까?
나는 프로그램을 최적화하려고하는데, 힙에 할당되는 대신 스택에 쉽게 들어갈 수있는 작은 로컬 문자열을 많이 사용하고있다.
std::basic_string
(세 번째 템플릿 인수)에 사용자 지정 할당기를 제공 할 수 있습니다. This answer은 스택 할당자가 사용할 수있는 링크와 링크를 사용하는 방법을 설명합니다.
std :: string의 일부 구현에서는이 작업을 작은 문자열 최적화라고합니다. 빠른 Google은 귀하의 경우 또는 귀하가 사용할 수있는 대안이 있는지 알려줍니다. – Pete
gcc의 vstring (__versa_string) 구현은 작은 문자열 최적화를 수행 할 수 있으며 표준 문자열 인터페이스를 사용합니다. gcc를 사용하면 ext/vstring을 포함하기가 쉽습니다. 그렇지 않으면 컴파일러/환경에 맞게 조정할 수 있습니다.
__versa_string SSO 버전은 스택에 15 바이트를 넘지 않도록 저장할 수 있으며, 그렇게 할 경우 SSO 버전은 문자열 크기 (http://codepad.org/2M7N9cTu)에 관계없이 16 바이트를 예약합니다.
http://www.and.org/ustr/은 스택 버퍼를 재사용 할 수 있지만 데비안 휘지 64 비트에서 링크하는 데 문제가 있습니다.
http://freecode.com/projects/str-class은 스택 버퍼를 재사용 할 수 있습니다. http://code.google.com/p/libglim/source/browse/trunk/gstring.hpp
그것은 제한된 STL 호환성이 있습니다 : 표준 : : ostream에 사용하기 위해 구현 basic_streambuf을
이것은 골동품 질문이지만, 현재 답변 중 어떤 것이 더 좋다고 느낍니다.
http://llvm.org/docs/ProgrammersManual.html#dss_smallstring
은 기본적으로 당신이 원하는 것입니다. BTW tcmalloc은 내 (잘못 설계된 : D) 문자열 할당 집중 프로그램 10 %에서 성능을 향상 시켰습니다. 또한 allocs가 perf 문제라고 증명하려면 프로필을 작성해야합니다.
Visual Studio에는 gcc가 Copy-On-Write를 선호하는 반면 (아주 작은 문자열의 경우 몇 개의 문자 만)이 최적화가 있습니다. –
우리는 Visual Studio 2010을 사용합니다.이 최적화 (MSDN 또는 다른 곳)에 대해 어느 곳에서든지 읽을 수 있습니까? – ROAR
최신 버전을 사용하는 경우 대부분의 컴파일러가이를 수행합니다. –