3

我有一个现有的一维数组,是memset最快的归零方法吗?

4

2 回答 2

4

最快的......可能是的。几乎可以肯定的越野车!

它主要取决于实现、平台和......数组包含的类型。

在 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。所以它是相同的速度,不多不少。

于 2012-01-03T19:52:27.270 回答
3

这是不可能知道的,因为它是特定于实现的。一般来说,这将是最快的,因为库实现者已经花费了大量时间来优化它以使其非常快,有时编译器可以对其进行优化,而memset手动实现中是无法完成的,因为它知道.memset

于 2012-01-03T19:36:40.883 回答