gpt4 book ai didi

c - 按 block 填充字符数组

转载 作者:行者123 更新时间:2023-11-30 21:18:17 25 4
gpt4 key购买 nike

好奇心问题假设我有:

int main(void)
{
char str[32];
for (i = 0; i < 32; i++)
str[i] = 0;
}

但我希望速度提高 4 倍

int main(void)
{
char str[32];
for (i = 0; i < 32 / 4; i += 4)
str[i] = (int)0;
}

我希望整个数组都用零填充。但数组没有用零填充

我的问题:为什么数组不用零填充?如何填充每个 int block 的数组?我的问题是研究c功能,如何告诉编译器 - 写入4个字节的 block ,即整数寄存器,它将减少内存访问次数4倍,在x64处理器上减少8倍

感谢大家,后续工作顺利:

int main(int argc, char *argv[])
{
char str[32];
int i;
for (i = 0; i < 32; i++)
str[i] = 12;
for (i = 0; i < 32 / sizeof(int); i++)
((int *) str)[i] = 0;
printf("%d\n", i);
for (i = 0; i < 32; i++)
printf("%d\n", str[i]);
return 0;
}

最佳答案

正确且最快的方法是将数组初始化为零

char str[32] = { 0 } ;

如果之后想将数组设置为零,请使用 memset 并启用编译器优化和内部函数,编译器将找出将数组设置为零的最快方法。

memset( str , 0 , sizeof( str ) ) ;

关于c - 按 block 填充字符数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26144962/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com