编译gcc -mcpu=cortex-m0 -mthumb -Os
会发出冗余指令,如本说明性示例所示:
void memzero(void* p, int n)
{
n -= 4;
do
{
*(int*)((char*)p + n) = 0;
n -= 4;
}
while(n > 0);
}
Run Code Online (Sandbox Code Playgroud)
结果是:
memzero:
movs r3, #0
subs r1, r1, #4
.L2:
str r3, [r0, r1]
subs r1, r1, #4
cmp r1, #0
bgt .L2
bx lr
Run Code Online (Sandbox Code Playgroud)
显然,显式比较本质上是一个 nop。有没有办法打开更多优化来解决这个问题?