So what if several functions that use less than 4KB each call each other before using the stack variables in a way that the first access skips over one page?
On compiler generated x86 code, the base pointer register will quickly follow when entering the target function.