2011-03-24 2 views
8

스택에 작은 문자열 (특정 임계 값까지)에 메모리를 할당하는 STL 인터페이스 호환 문자열 클래스와 큰 문자열에 대한 힙이 있는지 알고 있습니까?작은 문자열에 대해 스택에 문자열 클래스를 할당합니까?

나는 프로그램을 최적화하려고하는데, 힙에 할당되는 대신 스택에 쉽게 들어갈 수있는 작은 로컬 문자열을 많이 사용하고있다.

+2

Visual Studio에는 gcc가 Copy-On-Write를 선호하는 반면 (아주 ​​작은 문자열의 경우 몇 개의 문자 만)이 최적화가 있습니다. –

+0

우리는 Visual Studio 2010을 사용합니다.이 최적화 (MSDN 또는 다른 곳)에 대해 어느 곳에서든지 읽을 수 있습니까? – ROAR

+1

최신 버전을 사용하는 경우 대부분의 컴파일러가이를 수행합니다. –

답변

1

std::basic_string (세 번째 템플릿 인수)에 사용자 지정 할당기를 제공 할 수 있습니다. This answer은 스택 할당자가 사용할 수있는 링크와 링크를 사용하는 방법을 설명합니다.

+4

std :: string의 일부 구현에서는이 작업을 작은 문자열 최적화라고합니다. 빠른 Google은 귀하의 경우 또는 귀하가 사용할 수있는 대안이 있는지 알려줍니다. – Pete

1

gcc의 vstring (__versa_string) 구현은 작은 문자열 최적화를 수행 할 수 있으며 표준 문자열 인터페이스를 사용합니다. gcc를 사용하면 ext/vstring을 포함하기가 쉽습니다. 그렇지 않으면 컴파일러/환경에 맞게 조정할 수 있습니다.

0

__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을

난 그냥 4 바이트를 사용하여 스택 버퍼를 재사용 할 수 헤더 전용 문자열 클래스를 썼다.

1

이것은 골동품 질문이지만, 현재 답변 중 어떤 것이 더 좋다고 느낍니다.

http://llvm.org/docs/ProgrammersManual.html#dss_smallstring

은 기본적으로 당신이 원하는 것입니다. BTW tcmalloc은 내 (잘못 설계된 : D) 문자열 할당 집중 프로그램 10 %에서 성능을 향상 시켰습니다. 또한 allocs가 perf 문제라고 증명하려면 프로필을 작성해야합니다.

관련 문제