Maison >développement back-end >Golang >Split Stacks sur AMD64 : une relique du passé ou toujours nécessaire ?

Split Stacks sur AMD64 : une relique du passé ou toujours nécessaire ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-06 03:43:02714parcourir

Split Stacks on AMD64: A Relic of the Past or Still Necessary?

Split Stacks : nécessaires ou inutiles sur les architectures AMD64 ?

La notion selon laquelle les split stacks sont inutiles sur les architectures 64 bits, en particulier AMD64, a fait surface dans des discussions sans déclarations explicites. Cependant, des experts tels que Ian Lance Taylor et bstrie y ont fait allusion.

Quel est l'argument implicite ?

L'argument implicite est que le vaste virtuel 64 bits L'espace d'adressage sur les systèmes AMD64 élimine le besoin de piles divisées. Taylor suggère que les programmes multithread peuvent s'exécuter avec une utilisation de mémoire considérablement réduite, car chaque thread n'a plus besoin de réserver une quantité substantielle d'espace de pile.

Bstrie reconnaît que la surcharge des piles divisées et leur cas d'utilisation limité dans Les environnements 32 bits les rendent moins attrayants pour les systèmes modernes.

Pourquoi les piles fractionnées sont-elles inutiles ?

Les piles fractionnées ont été développées comme solution à l'espace d'adressage limité disponible dans Systèmes 32 bits. Dans de tels systèmes, chaque thread nécessite sa propre pile, et la taille totale de la pile de tous les threads pourrait rapidement consommer la mémoire disponible.

Cependant, dans les architectures AMD64, l'espace d'adressage de 64 bits est exceptionnellement grand, ce qui permet des millions de plages d'adresses de pile distinctes, chacune ayant une taille comparable à un espace d'adressage entier de 32 bits. Ce vaste espace d'adressage élimine le besoin de piles fractionnées pour gérer efficacement plusieurs threads.

Détails de mise en œuvre

Sur les systèmes AMD64, le modèle de mémoire plate est utilisé, avec de la mémoire virtuelle traductions gérées par l'unité matérielle de gestion de la mémoire (MMU). Il est nettement plus efficace de réserver de gros morceaux d'espace d'adressage virtuel pour chaque pile, en mappant initialement uniquement la première page (4 Ko) à la RAM physique.

Cette approche permet aux piles de s'étendre et de se contracter selon les besoins, en utilisant des espaces virtuels contigus. adresses. Le système d'exploitation configure dynamiquement la MMU pour mapper les pages sur la RAM réelle à mesure que la pile augmente ou diminue, garantissant une utilisation efficace de la mémoire.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn