我見過一個couple of posts關於malloc和新的區別,我明白這一點。在malloc和新的C++之間有任何性能差異
但是,這些帖子都沒有談到性能,所以我想知道這兩者之間是否存在任何性能差異,或者編譯器是否實質上做了同樣的事情。
爲了便於比較,我們假設我們在這裏討論原始類型(謝謝Hans Passant)。
預先感謝您。
我見過一個couple of posts關於malloc和新的區別,我明白這一點。在malloc和新的C++之間有任何性能差異
但是,這些帖子都沒有談到性能,所以我想知道這兩者之間是否存在任何性能差異,或者編譯器是否實質上做了同樣的事情。
爲了便於比較,我們假設我們在這裏討論原始類型(謝謝Hans Passant)。
預先感謝您。
你可能會想比較malloc()
和free()
與operator new()
和operator delete()
(和它們的排列形式):這是怎樣的記憶是從對象的構造分配獨立。性能可能非常相似,並且很可能兩種方法最終都使用相同的內存池:C++運算符可能是一個薄薄的包裝器,可能是malloc()
和free()
(但不是相反:用戶可以安全地實現operator new()
和operator delete()
根據malloc()
和free()
)。
要確定實際性能,您顯然需要以合理的方式對兩種方法進行分析。 Withouth這樣做,我不會對大多數系統有很大的不同。當然,結果將針對不同的系統。
要確定的唯一方法是在您的編譯器上設置各種選項。沒有適用於所有編譯器的硬性規則。
如果您正在討論分配int
或double
的數組,那麼對於任何正常的實現,您應該無法檢測到性能差異。
答案取決於具體的編譯器,但我懷疑大多數新的實現只是在封面下調用malloc。 malloc通常會稍微快一點,因爲它不會調用任何附加代碼(不像new,它會調用對象的構造函數)。
當構造函數執行一些真正的CPU密集型工作時,malloc甚至會更快*。但通常你有理由在構造函數中完成所有這些工作,而當你沒有時你可以添加另一個不具備的構造函數。但嚴重的是,malloc只能用於POD類型,不能用於對象,因爲構造函數通常是出於某種原因。 – Philipp
那麼,malloc()將不會調用構造函數。你如何期待一個合理的比較? –
確實。我們來比較一下原始類型。這會更合理嗎? – OneMore
您需要在問題中明確說明。僅僅將它放入評論是不夠的。 –