2011-03-24 86 views
8

有誰知道是否有一個STL接口兼容的字符串類,它爲堆棧上的小字符串(達到特定閾值)分配內存,併爲較大的字符串分配堆?字符串類爲堆棧分配小字符串?

我正在尋找優化程序,我使用了很容易放在堆棧上的小本地字符串的分配,而不是分配在堆上。

+2

Visual Studio具有此優化(對於非常小的字符串,只有幾個字符),而gcc首選寫時複製(Copy-On-Write)。 – 2011-03-24 12:50:16

+0

我們使用Visual Studio 2010,是否有任何地方可以閱讀關於此優化(MSDN或其他地方)的內容? – ROAR 2011-03-24 12:59:55

+1

大多數編譯器都會這樣做,如果你有足夠的版本。 – 2011-03-24 13:02:21

回答

1

您可以爲std::basic_string(它是第三個模板參數)提供自定義分配器。 This answer解釋瞭如何使用它和鏈接來實現可以使用的堆棧分配器。

+4

std :: string的一些實現可以做到這一點,它被稱爲小字符串優化。一個快速的谷歌應該告訴你,如果你的確如此,或者有一個你可以使用的替代品。 – Pete 2011-03-24 12:40:01

1

來自gcc的vstring(__versa_string)實現可以執行小字符串優化,並具有std字符串接口。如果你碰巧使用gcc,很容易包含ext/vstring。否則,您可能可以將其調整到您的編譯器/環境。

0

__versa_string SSO版本可以在堆棧中存儲不超過15個字節,如果存在,則無論字符串大小如何(http://codepad.org/2M7N9cTu),它都會保留16個字節。

http://www.and.org/ustr/可以重用堆棧緩衝區,但是我在Debian Wheezy 64bit下遇到了問題。

http://freecode.com/projects/str-class可以重用堆棧緩衝區。

我寫僅使用四個字節,並且可以重複使用一個堆棧緩衝器中的僅頭串類: http://code.google.com/p/libglim/source/browse/trunk/gstring.hpp
它具有有限的相容性STL:用於與標準:: ostream的使用實現basic_streambuf。