在不使用奇淫怪技的情況下, 如何寫出比 STL 快的 vector

時間 2021-05-07 04:28:59

1樓:MashPlant

stl的vector完全放棄了使用realloc來優化記憶體分配的可能性,然而很多場景下這都是乙個完全安全的優化,速度提公升也很明顯。這裡有乙個小例子:

比起malloc new/free old,realloc(重新分配記憶體)在效能上有多少的優勢?

2樓:feverzsj

std::vector 目前最顯著的效能缺陷,主要是因為標準要求新構造的元素,需要使用值初始化,而非預設初始化,所以像boost::container::

vector就提供了特殊的版本,可以使用預設建構函式。另一方面,由於contiguous iterator要到c++20才會引入,目前的stl實現,有時不能很好的識別contiguous iterator,導致使用低效的拷貝方式。

3樓:saturnman

純POD型別應該對效能影響最大的是allocator,一般各家提供的STL裡使用了類似SLAB或是直接就是SLAB記憶體池技術,你可以試試自己實現一下slab放裡面看看對效能影響多大。對於string應該是各種異常和原子操作造成的,因此特性都不一樣也就不好比較效能了。

4樓:Dust Loong

自己以前想過, 如果有類似於try_realloc函式, 實際針對Non-POD型別再分配時非常有用. 不過, 雖然標準庫沒有, 第三方的分配庫可能有實現.(POD可以直接用realloc, STL實現應該是C++一套, 沒有類似realloc的介面).

自己對於快沒有什麼剛需,但是對於輕量化有需求,所以實現vector不會導致模板膨脹

5樓:據說他姓feng

如果存在不使用奇技淫巧也能飛快的STL實現,則一定會出現使用奇技淫巧而執行起來更快的STL實現。

施主,我勸你放棄,要麼你高估了自己,要麼你低估了寫STL那幫老頭。

6樓:

能寫出debug模式比stl快的。

release模式因為本來就沒什麼時間浪費,效能就這樣了。

push_back的記憶體開銷可以優化,但是需要優化的時候,往往可以預先reserve。

如果允許用奇技淫巧,那麼有個特殊辦法,可以避免resize記憶體開銷,重新對映記憶體頁面,把舊的vector記憶體,直接對映到新的更大的虛擬位址,0開銷。

7樓:

完全能超越stl確實是挺難的。

但差了10倍的話,也確實有點誇張了,找找看熱點呼叫在哪,針對性的優化一下?

或者回頭重新從頭看看,是不是某些思路和大方向一開始就歪了?

candy crush 在不使用道具的情況下每一局一定能達到過關嗎?

從不用道具,現在在 2655 關。我這人有點強迫症,對自己的要求就是不用道具,有時候我媽用我的手機玩會用道具過一關,我都會返回去不用道具把那一關再過一遍。不過現在連續過關之後會強制贈送彩塘炸彈或者步數之類的,我也沒辦法,只好接受啦。 San Cheung 牛人真多,發現自己玩這個有點上癮了。用過送的...

怎麼在不使用瀉藥的情況下快速拉粑?

屁der 我自認為我拉粑粑很快,我媽說我 你拉粑粑的時間怎麼比你爸噓噓還快。我是常年早上拉粑粑,時間規律,七點多是大腸最活躍的時候,而我一般七點之前也起床了 感謝高三給我規律生活 拉粑粑可以不到一分鐘,最主要的就是規律生活。你可以嘗試兩三天只在早上拉粑粑,可能過幾天就規律了,你的大腸就該知道 啊到點...

在不使用node的情況下,開發者怎樣在js裡呼叫乙個自己實現的c c 函式?

benpigchu 你可以 使用js引擎的相關C C 介面,將C C 函式放到js的執行環境中 實際上這就是node的實現原理 把C C 編譯成WASM放在瀏覽器裡執行需要瀏覽器做相關支援 直接把C C 編譯成JS 這麼做的人一定只是寫著玩的 在.NET目錄乙個陰暗的角落裡,躺著乙個jsc.exe ...