Si su procesador no tiene soporte de hardware para un parámetro / pila local, pero el compilador intenta implementar una pila de parámetros en tiempo de ejecución de todos modos, y si su código no necesita ser reentrante, puede guardar el código espacio asignando estáticamente variables automáticas. En algunos casos, esto debe hacerse manualmente; en otros casos, las directivas del compilador pueden hacerlo. La asignación manual eficiente requerirá el intercambio de variables entre rutinas. Este intercambio debe realizarse con cuidado, para garantizar que ninguna rutina use una variable que otra rutina considere "en alcance", pero en algunos casos los beneficios del tamaño del código pueden ser significativos.
Algunos procesadores tienen convenciones de llamada que pueden hacer que algunos estilos de paso de parámetros sean más eficientes que otros. Por ejemplo, en los controladores PIC18, si una rutina toma un solo parámetro de un byte, se puede pasar en un registro; si se necesita más que eso, todos parámetros deben pasarse en la RAM. Si una rutina tomara dos parámetros de un byte, puede ser más eficiente "pasar" uno en una variable global y luego pasar el otro como parámetro. Con rutinas ampliamente utilizadas, los ahorros pueden sumar. Pueden ser especialmente significativos si el parámetro pasado a través de global es un indicador de un solo bit, o si generalmente tendrá un valor de 0 o 255 (ya que existen instrucciones especiales para almacenar un 0 o 255 en la RAM).
En el ARM, poner variables globales que se usan frecuentemente juntas en una estructura puede reducir significativamente el tamaño del código y mejorar el rendimiento. Si A, B, C, D y E son variables globales separadas, entonces el código que usa todas ellas debe cargar la dirección de cada una en un registro; Si no hay suficientes registros, puede ser necesario volver a cargar esas direcciones varias veces. Por el contrario, si forman parte de la misma estructura global de MyStuff, entonces el código que usa MyStuff.A, MyStuff.B, etc. simplemente puede cargar la dirección de MyStuff una vez. Gran victoria.