Certains langages et compilos tels que GNAT le compilo ADA de gnu peuvent vérifier le débordement de pile (
source), mais comme la pile est un outil fréquemment utilisé, les exécutables produits sont plus lents. Note:
ADA est totalement inspiré du Pascal et est hyper strict (il a été fait pour l'Armée). Il pourrait bien te plaire Bruno
(
tuto).
Le fait que la pile décroit est une constante de tous les CPU depuis au moins les années 70. Les instructions étant lues dans le sens des adresses croissantes, on a placé très tôt dans l'histoire des ordinateurs l'organisation mémoire ainsi:
afin d'optimiser l'utilisation de la mémoire.
En bas on retrouve classiquement les vecteurs d'interruption CPU, au dessus une zone TEXT qui contient le code et certaines constantes (chaines de caractères), puis les variables initialisées. Ensuite vient le BSS, une zone pour les variables initialisées à 0. Ensuite il y a une zone de mémoire "libre" appelée TAS. Les allocations dynamique ont lieu là dedans . Au sommet on trouve l'OS, en dessous la PILE qui croit par le bas. La Pile et le Tas occupent la même zone de mémoire libre dans l'espace d'adressage. L'un (le tas) croit par le haut, l'autre (la pile) par le bas.
Ainsi on évite de bloquer la croissance du tas parce qu'il rencontrerait le sommet d'une pile croissant aussi par le haut. Cette organisation laisse arbitrairement croitre la pile et le tas dans la zone de mémoire libre sans interférer l'une avec l'autre tant qu'il reste de la mémoire libre au milieu des deux.