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 reingresado, es posible que pueda para ahorrar espacio de código mediante la asignación estática de variables automáticas. En algunos casos, esto debe hacerse manualmente; En otros casos, las directivas del compilador pueden hacerlo. Una asignación manual eficiente requerirá compartir las variables entre las rutinas. Dicho intercambio debe hacerse con cuidado, para asegurar que ninguna rutina use una variable que otra rutina considere "dentro del alcance", pero en algunos casos los beneficios de tamaño de 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 los parámetros deben pasarse en la RAM. Si una rutina toma 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 las rutinas ampliamente utilizadas, los ahorros pueden sumarse. Pueden ser especialmente significativos si el parámetro pasado a través de global es un indicador de un solo bit, o si normalmente tendrá un valor de 0 o 255 (ya que existen instrucciones especiales para almacenar un 0 o 255 en la RAM).
En el ARM, colocar variables globales que se usan con frecuencia 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 los usa a todos debe cargar la dirección de cada uno 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 MyStuff, entonces el código que utiliza MyStuff.A, MyStuff.B, etc. puede simplemente cargar la dirección de MyStuff una vez. Gran victoria.