我有一个现有的1D数组,memset
是将它归零的最快方法吗?
答案 0 :(得分:4)
最快......可能是的。 越野车几乎肯定!
它主要取决于实现,平台和......数组包含的类型。
在C ++中定义变量时,会调用其构造函数。定义数组时,将调用所有数组元素的构造函数。
只有当数组类型知道具有可以由全零表示的初始状态并且默认构造函数不执行任何操作的情况时,才能将擦除内存视为“好”。
对于内置类型,一般为true,对其他类型也是false。
最安全的方法是使用默认的初始化临时值分配元素。
template<class T, size_t N>
void reset(T* v)
{
for(size_t i=0; i<N; ++i)
v[i] = T();
}
请注意,如果T为char
,则函数将实例化并完全翻译为memset
。所以速度相同,不多也不少。
答案 1 :(得分:3)
这是不可能知道的,因为它是特定于实现的。一般来说,memset
将是最快的,因为库实现者花了很多时间来优化它非常快,有时编译器可以对它进行优化,这是在手动实现上无法完成的,因为它知道memset
的含义。