Quando avviene precisamente l'allocazione automatica della memoria?

Partendo dal presupposto che entrando in un blocco di istruzioni del tipo:

codice:
{
	int a = 0;
}
la variabile locale a viene automaticamente allocata sullo stack quando si entra in quel blocco di codice, e distrutta quando si esce dal blocco stesso.

Avevo la necessità di poter controllare l'allocazione automatica della memoria in modo ad esempio di evitare cose del tipo:

codice:
int array[ 0xFFFFFF ];
Che produrrebbero necessariamente uno stack overflow runtime non appena si entrerebbe nel blocco di istruzioni in cui viene dichiarato l'array.

Magari anche avere la possibilità di generare un warning se l'allocazione automatica della memoria in un determinato blocco supera un certo valore.

Come fare?