假设我们有一个T myarray[100]
,其中T=int、unsign int、long long int或unsign long long int,那么将其所有内容重置为零(不仅用于初始化,而且在我的程序中多次重置内容)的最快方法是什么?也许和Memset一起?
同样的问题也适用于像T *myarray = new T[100]
这样的动态array.
假设我们有一个T myarray[100]
,其中T=int、unsign int、long long int或unsign long long int,那么将其所有内容重置为零(不仅用于初始化,而且在我的程序中多次重置内容)的最快方法是什么?也许和Memset一起?
同样的问题也适用于像T *myarray = new T[100]
这样的动态array.
memset
(从<string.h>
开始)可能是最快的标准方式,因为它通常是直接用汇编编写并手动优化的 routine .
memset(myarray, 0, sizeof(myarray)); // for automatically-allocated arrays
memset(myarray, 0, N*sizeof(*myarray)); // for heap-allocated arrays, where N is the number of elements
顺便说一下,在C++中,习惯用法是使用std::fill
(从<algorithm>
):
std::fill(myarray, myarray+N, 0);
其中may将自动优化为memset
;我很确定,它的运行速度将达到memset
秒,持续int
秒,而如果优化器不够智能,对于较小的类型,它的性能可能会稍差一些.尽管如此,当有疑问时,还是要提供个人资料.