假设我们有一个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秒,而如果优化器不够智能,对于较小的类型,它的性能可能会稍差一些.尽管如此,当有疑问时,还是要提供个人资料.

C++相关问答推荐

如何正确地索引C中的 struct 指针数组?

为什么I2C会发送错误的数据?

如何跨平台处理UTF-16字符串?

每个 struct 变量在C中都有自己的命名空间吗?

对重叠字符串使用MemMove

为什么我的Hello World EFI程序构建不正确?

在txt文件中找到指定的字符串,并从数字中减go 相同的值

如何在POSIX-UEFI中获得输入?

如何仅使用软件重新初始化STM32微控制器中的USB枚举?

C堆栈(使用动态数组)realloc内存泄漏问题

收到不兼容的指针类型警告,因为函数的返回不是空*,而是 struct 指针

C语言中的数字指针

Fprintf正在写入多个 struct 成员,并且数据过剩

如何在不更改格式说明符的情况下同时支持双精度和长双精度?

Dlsym()的手册页解决方法仍然容易出错?

Malloc和对齐

STM32:代码的执行似乎取决于它在闪存中的位置

C循环条件内的函数

可以从指针数组中的值初始化指针吗?

在 C/C++ 中原子按位与字节的最佳方法?