在我目前的代码中,我有类似的东西
while(true) //Infinite loop
{
char buff[60];
.....
....
}
我想知道什么是更好的表现。
memset(buff, 0, 60);
或注意:
我的要求是每次循环重启时都需要让char
数组完全清理。
答案 0 :(得分:6)
“它的方式”不会给你一个充满零的数组。但是你无论如何都不必打电话给memset
。如果你只是在循环中使用buff
,我认为最好将它放在循环的范围内:
while(true) //Infinite loop
{
char buff[60] = {}; // buff is full of zeros
.....
....
}
答案 1 :(得分:2)
memset
做了一些工作,因此它必须“影响性能”。但它通常都经过了大量优化,因为它是一种常见的操作。
由于这个原因,您不太可能找到更快的清除阵列的方法,为了进行比较,您显示的代码 根本不会初始化数组。
作为参考,它应该看起来像:
char buff[60];
while (true) {
memset(buff, 0, sizeof(buff));
...
可能更快的唯一解决方案是找到一种方法来停止,具体取决于在每次迭代开始时归零的缓冲区
答案 2 :(得分:2)
如果您一直将其用作C样式字符串:
char buff[60];
buff[0] = 0;
这只会设置第一个字节,但如果您将它用作简单的C样式字符串,那么您需要设置它以使其成为零长度字符串。在64位计算机上,它比任何填充整个缓冲区的解决方案要快7倍。
如果你确实需要填充0的整个缓冲区,那么
char buff [60] = {};
会这样做。