one.c
int main(void){
char buf[4096] = { 0};
while (1 /*flag*/) {
/*Some operation here*/
memset (buf, 0, sizeof (buf));
}
}
two.c
int main(void){
while (1 /*flag*/) {
char buf[4096] = { 0};
/*Some operation here*/
}
}
在 one.c 中,使用了显式的 memset 函数。但是在 two.c 中,数组在循环内部声明并初始化为零。
one.c
是更好的选择。在这个文件中,相同的变量内存被设置和取消,但是在two.c
中,你正在创建一个循环时间buf
。 - Rustamtwo.c
。 - The Paramagnetic Croissantmemset
并不是魔法。它必须遍历你想要清零的所有内存。从语义上讲,它等同于重新初始化。(有可能编译器将重新初始化实现为memset
,或者反之亦然)。你所说的“在每次迭代中初始化数组比重置内存位置更耗费资源”根本就没有意义。 - The Paramagnetic Croissantone.c
中变量定义中的初始化器,会有额外的4 KiB内存初始化。如果变量在one.c
中没有显式初始化,则两者将等效。 - Jonathan Lefflerchar buf[4096];
,但是没有进行任何初始化。 - Jonathan Leffler