给出了使用gcc 5.3.1
和-Ofast
编译的以下测试程序:
#include <stdint.h>
struct foo {
uint8_t b[8];
uint64_t q;
} data[256];
int main(void)
{
unsigned i;
for (i = 0; i < 256; i++)
data[i] = (struct foo){{1, 2, 3, 4, 5, 6, 7, 8}, 0};
return 0;
}
生成的汇编代码使用8个movb指令而不是单个movq指令复制结构的8个字节。这似乎是某种预期的行为,因为当所有值都为0或复制结构时,它使用单个movq指令来写入8个字节,但我找不到任何关于此的信息。