我有以下简单程序:
#define N 20
long c[N];
long a[N + N];
void f(void)
{
long *s = c;
long *p = a;
while (p != a + N) *p++ = *s++;
while (p != a + N + N) *p++ = 0;
}
Run Code Online (Sandbox Code Playgroud)
我用它编译:
/usr/gcc-arm-none-eabi-5_4-2016q3/bin/arm-none-eabi-gcc -mthumb -O3 -o main.o -c main.c
Run Code Online (Sandbox Code Playgroud)
gcc方便地用memcpy和memset分别替换循环:
00000000 <f>:
0: b570 push {r4, r5, r6, lr}
2: 4d07 ldr r5, [pc, #28] ; (20 <f+0x20>)
4: 4c07 ldr r4, [pc, #28] ; …Run Code Online (Sandbox Code Playgroud)