because loading an int into a register and then pushing is stupidly inefficient rather than just a mov m32, imm32
not sure where did you get immediate from you do realize that compilers put variables into registers and sometimes optimize using stack space for them completely, right?