我對此我無法在網絡上找到答案的問題...爲什麼釋放速度很慢?
我已經宣佈了一組這樣的:
set<unsigned int> MySet
我將與梅森倍捻機產生一百萬個隨機數。隨機生成和插入速度非常快(一百萬個數字大約爲一秒),但釋放非常緩慢(1分半鐘)。
爲什麼釋放這麼慢?我沒有使用任何自定義析構函數。
我對此我無法在網絡上找到答案的問題...爲什麼釋放速度很慢?
我已經宣佈了一組這樣的:
set<unsigned int> MySet
我將與梅森倍捻機產生一百萬個隨機數。隨機生成和插入速度非常快(一百萬個數字大約爲一秒),但釋放非常緩慢(1分半鐘)。
爲什麼釋放這麼慢?我沒有使用任何自定義析構函數。
編譯在釋放模式代碼。
這做了兩兩件事。
注意此信息是關於DevStudio的。
大概是因爲它更有意義的重新分配爲代價的優化配置,因爲許多應用程序分配不解除分配,但從來沒有反之亦然。我已經看到了類似的模式自己,在混合malloc
和free
電話(而不是分配和釋放所有在一次)的應用程序。
我從來沒有寫過堆分配,所以我不知道是否有更深層次的技術原因不止於此。釋放時,必須找到併合並相鄰的空閒塊。所以這項工作只是根本不同。
1萬的小free()
的
90秒聽起來很慢。我從來沒有真正編寫過Windows,所以我不能說這是不正常的,但系統應該能夠做得更好。
你的問題的解決方案可能是簡單地跳過程序退出前釋放的對象。您可以嘗試從std::allocator< unsigned int >
中派生出一個自定義分配器,這使得deallocate
無法運行。
我不知道你用的是什麼作品Sys系統,但它可能是內存是每個塊被釋放後,被重新壓縮。 –
您是否在開啓優化的情況下進行編譯? -O3 –
Windows 7x64。在Visual Studio 2010下編譯。 有什麼方法可以加速釋放嗎? –