一种分配和初始化数组的方法,比普通的循环和设置更快

Some way for allocating and initializing array faster than plain loop-and-set

本文关键字:循环 设置 方法 分配 一种 初始化 数组      更新时间:2023-10-16

这是我在c++中分配和初始化数组的方式。

char *dataPtr;
dataPtr= new char [40000]; 
int i; 
for(i=0;i<40000;i++)
{
    dataPtr[i]=200; 
}

是否有其他更快、更干净的方法来实现这一点,因为for循环占用了我的应用程序相当多的时间?

使用std::vector:

std::vector<char> data(40000, 200);

您可以使用memset(),它有一个优化的汇编核心,在运行时适当地使用SSE/SSE2/等指令。memset()函数的设计正是为了完成以下任务:尽可能快地将char数组中的每个char设置为特定值。

#include <cstring>
char *dataPtr = new char[LENGTH];
std::memset(dataPtr, 200, LENGTH);

然而,现代编译器会为你做这件事,你可以检查程序集,你可能会在原始代码中发现对memset()的调用或使用for循环的类似内容。无论如何,它只有40 kB,所以您不会节省太多时间,除非您必须经常初始化数组。

通过200初始化每个数组元素,可以使用

std::fill_n(dataPtr, 40000, 200);