[英]What is the fastest way to zero an existing array?
我有一個現有的1D陣列,是memset
以零的最快方式嗎?
最快...可能是的。 越野車幾乎可以肯定!
它主要取決於實現,平台和......數組包含的類型。
在C ++中定義變量時,會調用其構造函數。 定義數組時,將調用所有數組元素的構造函數。
擦除內存可以被認為是“好的”僅適用於已知數組類型具有可以由全零表示的初始狀態並且默認構造函數不執行任何操作的情況。
對於內置類型,這通常是正確的,但對於其他類型也是如此。
最安全的方法是使用默認的初始化臨時值分配元素。
template<class T, size_t N>
void reset(T* v)
{
for(size_t i=0; i<N; ++i)
v[i] = T();
}
請注意,如果T為char
,則函數將實例化並完全轉換為memset
。 所以速度相同,不多也不少。
這是不可能知道的,因為它是特定於實現的。 一般來說, memset
將是最快的,因為庫實現者花費了大量時間來優化它非常快,有時編譯器可以對它進行優化,這是在手動實現上無法完成的,因為它知道其含義 memset
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.