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 el valor de la memoria". En el conjunto de instrucciones ARM Cortex-M3, por ejemplo, hay al menos cinco formas de 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ápido, 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 será aún más lenta, pero esta última se puede usar con cualquier valor de 32 bits.
En los procesadores x86 más antiguos, las instrucciones de comparación de forma corta se ejecutarían más rápido que las de forma larga, pero muchos procesadores más nuevos convertirán tanto las formas largas como las cortas en la misma representación cuando se recuperan por primera vez, y almacenarán esa representación uniforme en el caché. Por lo tanto, si bien 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.
Tenga en cuenta también que en muchos casos donde una constante se usa mucho dentro de un bucle, un compilador solo necesitará cargar la constante en un registro una vez, antes de que comience el bucle, haciendo que las distinciones de temporización sean discutibles. Por otro lado, hay algunas situaciones, incluso en pequeños bucles, donde eso no siempre sucederá; Si un bucle es pequeño pero muy ejecutado, ocasionalmente puede haber un rendimiento importante entre las comparaciones que involucran valores cortos e inmediatos y los que involucran valores más largos.