Якщо ваш процесор не має апаратної підтримки для параметра / локального стека, але компілятор намагається все-таки реалізувати стек параметрів виконання, і якщо ваш код не потребує повторного введення, ви можете зберегти код простір шляхом статичного розподілу автоматичних змінних. У деяких випадках це потрібно робити вручну; в інших випадках директиви компілятора можуть це зробити. Для ефективного ручного розподілу буде потрібно обмін змінними між процедурами. Такий обмін повинен здійснюватися обережно, щоб переконатися, що жодна програма не використовує змінну, яку інша рутина вважає "за обсягом", але в деяких випадках переваги розміру коду можуть бути значними.
Деякі процесори мають умовні виклики, які можуть зробити деякі стилі передачі параметрів більш ефективними, ніж інші. Наприклад, на контролерах PIC18, якщо підпрограма приймає один однобайтовий параметр, вона може передаватися в регістр; якщо це займає більше, всі параметри повинні бути передані в оперативній пам'яті. Якщо звичайна програма прийме два однобайтові параметри, можливо, найефективніше "передавати" один у глобальній змінній, а потім передавати інший як параметр. При широко використовуваних процедурах заощадження можуть збільшити. Вони можуть бути особливо значущими, якщо параметр, переданий через глобальний, є однобітним прапором або якщо він, як правило, має значення 0 або 255 (оскільки існують спеціальні інструкції для зберігання 0 або 255 в ОЗУ).
У ARM введення глобальних змінних, які часто використовуються разом у структурі, може значно зменшити розмір коду та підвищити продуктивність. Якщо A, B, C, D і E є окремими глобальними змінними, то код, який використовує всі, повинен завантажувати адресу кожного в реєстр; якщо регістрів недостатньо, можливо, доведеться перезавантажувати ці адреси кілька разів. На противагу цьому, якщо вони є частиною тієї самої глобальної структури MyStuff, то код, який використовує MyStuff.A, MyStuff.B, тощо, може просто завантажити адресу MyStuff один раз. Великий виграш.