3

在我当前的代码中,我有这样的东西

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

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

  1. 在进入无限循环然后使用memset(buff, 0, 60);or
  2. 保持原样。memset 会影响性能吗?

笔记:

我的要求是char每次循环重新启动时都需要让阵列完全干净。

4

3 回答 3

6

“它的方式”不会给你一个充满零的数组。但无论如何你都不必打电话memset。如果您只是buff在循环内部使用,我认为最好将其保留在循环范围内:

while(true) //Infinite loop
{
   char buff[60] = {}; // buff is full of zeros
   .....
   ....
}
于 2013-08-20T09:50:44.463 回答
2

memset做一些工作,所以它必须“影响性能”。不过,它通常会进行大量优化,因为它是一种常见的操作。

因此,您不太可能找到一种更快的方法来清除数组,并且为了进行比较,您显示的代码根本没有初始化数组。

作为参考,它应该看起来像:

char buff[60];
while (true) {
    memset(buff, 0, sizeof(buff));
    ...

唯一可能更快的解决方案是找到一种停止方法,具体取决于在每次迭代开始时将缓冲区归零

于 2013-08-20T09:47:19.563 回答
2

如果您一直将其用作 C 样式字符串:

char buff[60];
buff[0] = 0;   

这只会设置第一个字节,但如果您将其用作简单的 C 样式字符串,那么您需要设置它以使其成为零长度字符串。它比在 64 位机器上填充整个缓冲区的任何解决方案都快 7 倍。

如果你真的需要用 0 填充整个缓冲区,那么

字符缓冲区 [60] = {};

会这样做。

于 2013-08-20T10:47:53.753 回答