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 ...