Muchos procesadores tienen instrucciones "pequeñas" que pueden realizar operaciones aritméticas, incluidas comparaciones, en ciertos operandos especificados de inmediato. Los operandos que no sean esos valores especiales deben usar un formato de instrucción más grande o, en algunos casos, deben usar una instrucción de "cargar valor desde la memoria". En el conjunto de instrucciones ARM Cortex-M3, por ejemplo, hay al menos cinco formas en que se puede comparar un valor con una constante:
cmp r0,#1 ; One-word instruction, limited to values 0-255
cmp r0,#1000 ; Two-word instruction, limited to values 0-255 times a power of 2
cmn r0,#1000 ; Equivalent to comparing value with -1000
; Two-word instruction, limited to values 0-255 times a power of 2
mov r1,#30000 ; Two words; can handle any value 0-65535
cmp r0,r1 ; Could use cmn to compare to values -1 to -65535
ldr r1,[constant1000000] ; One or two words, based upon how nearby the constant is
cmp r0,r1
...
constant1000000:
dd 1000000
La primera forma es la más pequeña; la segunda y tercera forma pueden o no ejecutarse tan rápidamente, dependiendo de la velocidad de la memoria desde la cual se obtiene el código. La cuarta forma casi seguramente será más lenta que las tres primeras, y la quinta forma aún más lenta, pero la última puede usarse con cualquier valor de 32 bits.
En los procesadores x86 más antiguos, las instrucciones de comparación de formato corto se ejecutan más rápido que las de formato largo, pero muchos procesadores más nuevos convertirán las formas larga y corta a la misma representación cuando se recuperan por primera vez, y almacenarán esa representación uniforme en el caché Por lo tanto, mientras que los controladores integrados (como los que se encuentran en muchas plataformas móviles) tendrán una diferencia de velocidad, muchas computadoras basadas en x86 no lo harán.
Tenga en cuenta también que, en muchos casos, cuando una constante se usa en gran medida dentro de un bucle, un compilador solo necesitará cargar la constante en un registro una vez, antes de que comience el bucle, lo que hace que las distinciones de tiempo sean discutibles. Por otro lado, hay algunas situaciones, incluso en pequeños bucles, en los que eso no siempre sucede; Si un bucle es pequeño pero está muy ejecutado, ocasionalmente puede haber un rendimiento importante entre comparaciones que involucran valores inmediatos cortos y valores que involucran valores más largos.