[英]Clearing out a char array best scenario - memset or not?
在我目前的代码中,我有类似的东西
while(true) //Infinite loop
{
char buff[60];
.....
....
}
我想知道什么是更好的性能明智。
memset(buff, 0, 60);
)之前,声明char buff(将包含包含换行符和换行符的字符串memset(buff, 0, 60);
要么 注意:
我的要求是每次循环重启时我都需要将char
数组完全清理干净。
“它的方式”不会给你一个充满零的数组。 但是你无论如何都不必调用memset
。 如果你只是在循环内部使用buff
,我认为最好将它保持在循环的范围内:
while(true) //Infinite loop
{
char buff[60] = {}; // buff is full of zeros
.....
....
}
memset
做了一些工作,所以它必须“影响性能”。 虽然它通常都经过了大量优化,因为它是一种常见的操作。
因此,您不太可能找到更快的方法来清除阵列,为了进行比较,您显示的代码根本不会初始化数组。
作为参考,它应该看起来像:
char buff[60];
while (true) {
memset(buff, 0, sizeof(buff));
...
可能更快的唯一解决方案是找到一种方法来停止,具体取决于在每次迭代开始时归零的缓冲区
如果您一直将其用作C样式字符串:
char buff[60];
buff[0] = 0;
这只会设置第一个字节,但如果您将它用作简单的C样式字符串,那么您需要设置它以使其成为零长度字符串。 在64位计算机上,它比任何填充整个缓冲区的解决方案要快7倍。
如果你确实需要填充0的整个缓冲区,那么
char buff [60] = {};
会这样做的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.