Je lisais quelques articles de base sur la manipulation de la mémoire par le processeur, et j'étais confus quant à la façon dont le processeur gère ce qui vient ensuite. Le concept de la pile d'appel est clair, mais je me demandais si la pile de pile/registre d'expression (utilisée pour faire les calculs) est la même pile, ou même si la pile pour les variables locales d'un sous-programme (un fonction) dans un programme est la même pile d'appels.Le processeur utilise-t-il plusieurs piles pour séparer la pile d'appels de la pile d'expression/de registre?
Si quelqu'un pouvait m'expliquer comment le processeur fonctionne en ce qui concerne ses piles, cela m'aiderait beaucoup.
N'est-ce pas plus une décision à prendre par le compilateur (sous réserve des conventions d'appel du système d'exploitation et des bibliothèques)? Le processeur sera bien avec n'importe quel arrangement de mémoire, il court juste les instructions. Je suppose que vous pourriez écrire du code sans utiliser de pile du tout. – Thilo
@Thilo: Il serait stupide de concevoir un ABI qui utiliserait une pile séparée pour l'espace de travail et le passage de paramètres si le processeur ne permettait pas de le faire efficacement. En x86, par exemple, il attacherait un autre registre (ne laissant que 6 des 8 registres comme «usage général» en mode 32 bits), et les petites instructions efficaces «push»/'pop' ne fonctionneraient qu'avec' rsp'. Enregistrer/restaurer des registres dans une pile "manuelle" nécessiterait donc plus d'octets de code (et plus d'instructions, puisque vous auriez à ajouter/ajouter manuellement à 'rbp' (le choix évident pour un deuxième pointeur de pile) –
@PeterCordes: C'est probablement la réponse que Rafael recherchait: Un CPU devrait avoir plusieurs ensembles d'opérations/registres de pile pour supporter efficacement plusieurs piles (et x86 ne le fait pas) – Thilo