繁体   English   中英

将现有阵列归零的最快方法是什么?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM