Bacana.
Fiz o mesmo programa em C e em Assembly e como esperado, assembly foi mais rápido:
Programa em C:
int main() {
for (int i=0; i<1000000000; i++) {}
return 0;
}
Teste:
$ gcc -o teste_c teste.c
$ time ./teste_c
$ ./teste_c 1,35s user 0,00s system 99% cpu 1,350 total
Programa em Assembly X86_64:
section .data
section .text
global _start
_start:
mov RAX, 1000000000
loop:
dec RAX
cmp RAX, 0
jz exit
jmp loop
exit:
mov RAX, 60
mov RDI, 0
syscall
Teste:
$ nasm -felf64 -o teste_asm.o teste.asm
$ ld -o teste_asm teste_asm.o
$ time ./teste_asm
$ ./teste_asm 0,23s user 0,00s system 99% cpu 0,237 total
Aí resolvi fazer um outro teste e pedi ao gcc pra otimizar o código:
$ gcc -o teste_c2 teste.c -O3
$./teste_c2 0,00s user 0,00s system 74% cpu 0,003 total
Pra minha surpresa, a otimização do gcc conseguiu gerar um código mais rápido do que o código em assembly que eu escrevi.