Dans les architectures informatiques, les piles sont des régions de mémoire où les données sont ajoutées ou supprimées selon le principe du dernier entré, premier sorti (LIFO) .
Dans la plupart des systèmes informatiques modernes, chaque thread dispose d'une zone mémoire réservée appelée pile. Lors de son exécution, une fonction peut ajouter des données d'état local au sommet de la pile ; à sa sortie, elle est responsable de la suppression de ces données. Au minimum, la pile d'un thread sert à stocker l'adresse de retour fournie par l'appelant, permettant ainsi aux instructions de retour de s'exécuter à l'emplacement correct.
La pile est souvent utilisée pour stocker des variables de longueur fixe, locales aux fonctions actives. Les programmeurs peuvent également choisir d'utiliser explicitement la pile pour stocker des données locales de longueur variable. Si une zone mémoire se trouve sur la pile du thread, on dit qu'elle a été allouée sur la pile ; il s'agit alors d'une allocation de mémoire basée sur la pile (SBMA). Ceci contraste avec l' allocation de mémoire basée sur le tas (HBMA). La SBMA est souvent étroitement liée à la pile d'appels de fonctions .
d'allocation de mémoire dynamique ), par exemple en C.longjmp` si le déplacement a eu lieu avant l'appel à ` plantage dû à un dépassement de capacité de la pile . C'est pourquoi les fonctions utilisant `std::limits` des pointeurs de pile et de cadre (avec des cadres de pile de taille fixe, le pointeur de pile est redondant car il est multiplié par la taille de chaque cadre). Cette approche est généralement bien moins coûteuse que l'appel à `alloca` de type Unix, ainsi que Microsoft Windows, implémentent une fonction permettant malloc. Le compilateur la traduit généralement en instructions intégrées manipulant le pointeur de pile, comme pour les tableaux de longueur variable . Bien qu'il ne soit pas nécessaire de libérer explicitement la mémoire, un risque de comportement indéfini dû à un dépassement de capacité de la pile existe. Cette fonction était présente sur les systèmes Unix dès la version 32/V (1978), mais ne fait partie ni du langage C standard ni d'aucune norme POSIX .Une version plus sûre de cette fonctionnalité, gnulib propose une interface équivalente, mais au lieu de lever une exception SEH en cas de dépassement, elle délègue la x86 , disposent d'instructions spécifiques pour manipuler la pile du thread en cours d'exécution. D'autres familles, telles que RISC-V , PowerPC et MIPS , ne prennent pas explicitement en charge la pile, mais s'appuient sur des conventions et délèguent sa gestion à l' interface binaire d'application (ABI) du système d'exploitation .
Auto VLAs
De plus, depuis la version C99 (optionnelle depuis C11), il est possible de créer automatiquement un tableau sur la pile au sein d'une fonction ; on parle alors d' auto VLA ( tableau de longueur variable ). Cette fonctionnalité n'est cependant pas prise en charge en C++ .
Plus d articles de Worldlex Wiki
Revenez a l index pour explorer davantage de pages sur l histoire, la science, la culture, la geographie et la societe en francais.
Explorer l index