Executando verificação de segurança...
8

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.

Carregando publicação patrocinada...
1
1

Sim claro:

gcc -o teste_c2.asm teste.c -O3 -S
	.file	"teste.c"
	.text
	.section	.text.startup,"ax",@progbits
	.p2align 4
	.globl	main
	.type	main, @function
main:
.LFB0:
	.cfi_startproc
	xorl	%eax, %eax
	ret
	.cfi_endproc
.LFE0:
	.size	main, .-main
	.ident	"GCC: (GNU) 12.2.0"
	.section	.note.GNU-stack,"",@progbits

Interessante que o GCC removeu completamente o loop vazio.

1
1
1
1
0

Seria interessante ver que código foi gerado, porque otimizadores costumam remover código inútil, como claramente é o caso.

Já foi postado :D