问题,假设我有:填充字符数组的好奇心
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块的数组?我的问题是Research for c功能,如何告诉编译器 - 写4个字节的块,即整数寄存器,它会减少内存访问次数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;
}
“0”本身的类型是“int”,“(int)0”与“0”没有区别。 – 2014-10-01 15:33:04
你的意思是快4倍?你所做的每次循环跳过3个块 – Grice 2014-10-01 15:34:00
这是一个堆栈变量,所以编写'char str [32] = {'\ 0'};'会初始化整个块 – 2014-10-01 15:42:42