清除char数组最佳方案 - memset与否?

时间:2013-08-20 09:22:44

标签: c++ memset

在我目前的代码中,我有类似的东西

while(true) //Infinite loop
{
   char buff[60];
   .....
   ....
}

我想知道什么是更好的表现。

  1. 在进入无限循环然后使用memset(buff, 0, 60);
  2. 之前声明char buff(将包含包含换行符和换行符的字符串)
  3. 保持原样。 memset会影响性能吗?
  4. 注意:

    我的要求是每次循环重启时都需要让char数组完全清理。

3 个答案:

答案 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] = {};

会这样做。