我一直想知道的一件事是,如果在我的C++代碼中使用的std::string
實例使用相同的分配器,還是他們有自己獨立的內存池?C++ std :: string的單個實例是否使用相同的分配器?
顯然,在多個頻繁創建和銷燬的字符串之間共享單個內存池會更高效。任何人都可以確認或否認這一點嗎?
我一直想知道的一件事是,如果在我的C++代碼中使用的std::string
實例使用相同的分配器,還是他們有自己獨立的內存池?C++ std :: string的單個實例是否使用相同的分配器?
顯然,在多個頻繁創建和銷燬的字符串之間共享單個內存池會更高效。任何人都可以確認或否認這一點嗎?
默認情況下,它們全部使用std::allocator
,它使用標準內存例程來獲得可用堆塊。這一層沒有涉及任何池。 (但是,大多數堆實現使用專用的低碎片堆來提供小分配,並且字符串最可能屬於此類別,但這是依賴於實現的,並不是專有或優化的std::string
s ... )。
如果不指定一個,C++的不同實例會使用相同的分配器。你可能指的是在java/python中標準的字符串實習。如果是這樣,否。沒有「標準」設施。但是它很容易增加,如果頻繁地創建/銷燬是一個問題
同一個分配器的不同實例,但是從C++ 03開始,給定分配器類型的所有實例都是等價的,即應該能夠釋放由另一個分配器分配的內存。這通常意味着它們實際上是從同一個地方分配和釋放的。 C++ 0x中的這一更改。 –
謝謝,沿着什麼,我想知道這行的。 –