많은 프로세서에는 "작은"명령어가 있는데,이 명령어는 비교를 포함하여 특정 즉시 지정된 피연산자에 대한 산술 연산을 수행 할 수 있습니다. 이러한 특수 값 이외의 피연산자는 더 큰 명령어 형식을 사용하거나 경우에 따라 "메모리에서 값로드"명령어를 사용해야합니다. 예를 들어 ARM Cortex-M3 명령어 세트에는 값을 상수와 비교할 수있는 방법이 5 가지 이상 있습니다.
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
첫 번째 형태는 가장 작습니다. 제 2 및 제 3 형태는 코드가 페치되는 메모리의 속도에 따라 빠르게 실행되거나 실행되지 않을 수있다. 네 번째 형식은 처음 세 가지 형식보다 거의 느리고 다섯 번째 형식은 훨씬 느리지 만 두 번째 형식은 32 비트 값으로 사용할 수 있습니다.
구형 x86 프로세서에서는 짧은 형식 비교 명령이 긴 형식의 명령보다 빠르게 실행되지만 많은 최신 프로세서는 처음 가져올 때 긴 형식과 짧은 형식을 모두 동일한 표현으로 변환하여 캐시에 균일 한 표현을 저장합니다. 따라서 임베디드 컨트롤러 (많은 모바일 플랫폼에서 사용되는 것과 같은)는 속도 차이가 있지만 많은 x86 기반 컴퓨터는 그렇지 않습니다.
또한 루프 내에서 상수를 많이 사용하는 많은 경우에 컴파일러는 루프가 시작되기 전에 타이밍 차이를 렌더링하여 레지스터에 상수를 한 번만로드하면됩니다. 반면에 작은 루프에서도 상황이 항상 발생하지는 않습니다. 루프가 작지만 많이 실행되는 경우, 짧은 값이 짧은 비교와 더 긴 값이 비교되는 경우가 종종 있습니다.