프로세서에 매개 변수 / 로컬 스택에 대한 하드웨어 지원이 없지만 컴파일러가 런타임 매개 변수 스택을 구현하려고 시도하고 코드를 다시 입력 할 필요가없는 경우 코드를 저장할 수 있습니다 자동 변수를 정적으로 할당함으로써 공간. 경우에 따라 수동으로 수행해야합니다. 다른 경우에는 컴파일러 지시문이이를 수행 할 수 있습니다. 효율적인 수동 할당은 루틴간에 변수를 공유해야합니다. 루틴이 다른 범위에서 "범위 내"로 간주하는 변수를 사용하지 않도록하기 위해 이러한 공유를 신중하게 수행해야하지만 경우에 따라 코드 크기 이점이 중요 할 수 있습니다.
일부 프로세서에는 일부 매개 변수 전달 스타일을 다른 것보다 효율적으로 만들 수있는 호출 규칙이 있습니다. 예를 들어, PIC18 컨트롤러에서 루틴이 단일 1 바이트 매개 변수를 사용하는 경우 레지스터에 전달 될 수 있습니다. 그 이상이 필요한 경우 모든 매개 변수를 RAM으로 전달해야합니다. 루틴이 2 바이트의 1 바이트 매개 변수를 사용하는 경우 전역 변수에서 하나를 "전달"한 후 다른 하나를 매개 변수로 전달하는 것이 가장 효율적일 수 있습니다. 널리 사용되는 루틴을 통해 비용을 절감 할 수 있습니다. 전역을 통해 전달 된 매개 변수가 단일 비트 플래그이거나 일반적으로 0 또는 255의 값을 갖는 경우 (특히 RAM에 0 또는 255를 저장하기위한 특수 명령이 있기 때문에) 특히 중요 할 수 있습니다.
ARM에서 자주 사용되는 전역 변수를 구조에 배치하면 코드 크기가 크게 줄어들고 성능이 향상 될 수 있습니다. A, B, C, D 및 E가 별도의 전역 변수 인 경우 모든 변수를 사용하는 코드는 각 주소를 레지스터에로드해야합니다. 레지스터가 충분하지 않으면 해당 주소를 여러 번 다시로드해야 할 수도 있습니다. 반대로, 동일한 전역 구조 MyStuff의 일부인 경우 MyStuff.A, MyStuff.B 등을 사용하는 코드는 MyStuff의 주소를 한 번만로드 할 수 있습니다. 큰 승리.