Поскольку JIT-компилятор может оптимизировать определенные части, чтобы не использовать стеки, а напрямую перейти в регистр.
Давайте возьмем вызов метода, например:
object a = new object(), b = new object(), c = new object();
DoSomething(a, b, c);
JIT-компилятор попытается поместить в регистр как можно больше параметров, чем помещать их в стек. Пример, построенный локально на X86, показывает:
00000082 push dword ptr [ebp-10h]
00000085 mov ecx,dword ptr [ebp-8]
00000088 mov edx,dword ptr [ebp-0Ch]
0000008b call dword ptr ds:[00742078h]
Теперь есть более сложные угловые случаи, подумайте о доступе к массиву / объекту.