如何快速清除DWORD指针数组

How to quickly clear DWORD pointer array?

本文关键字:指针 数组 DWORD 清除 何快速      更新时间:2023-10-16

这是我的代码。

DWORD *dwDSE = new DWORD[4096];

这是我清除它的[低效]方法:

for (INT k=0;k<4096;k++)
    dwDSE[k] = 0;

清除/初始化为零的最好方法是什么?

可以将其初始化为0

DWORD *dwDSE = new DWORD[4096](); //Note the empty parenthesis ()   

使用memset:

memset(dwDSE,0,4096*sizeof(DWORD));

除非你有一个非常糟糕的编译器,这是最有效的方法应该是:

std::fill_n( dwDSI, 4096, 0 );

这应该会生成与循环相同的代码(即也是非常有效的),并且在许多情况下,将是显著的比memset更有效率,而后者通常是最差的(当然,只适用于特殊值0)

当然,你通常不会做new DWORD[4096]无论如何。如果你写:

std::vector<DWORD> dwDSI( 4096 );

你会得到它已经初始化为0,你不会泄漏它异常情况。如果遗留接口需要它(这是人们使用DWORD的唯一原因),你可以使用&dwDSI[0]dwDSI.data()获取原始指针c++ 11。

编辑:

对另一个答案的评论让我意识到一个要点:你真的需要动态地分配数组吗?如果不是,

DWORD dwDSI[4096] = {};

是最佳解决方案。(= {}确保初始化0。)

在这种情况下可以使用memset函数

std::memset(dwDSE, 0, sizeof(dwDSE)*4096);

或fill_n函数:

std::fill_n(dwDSE, 4096, 0);