quelles parties variables sont stockées dans la stack dans ce code?

J’ai ce code suivant et je ne comprends pas vraiment quelles parties variables de la fonction test_function sont stockées sur le segment de stack?

Dans le livre, il est indiqué “La mémoire de ces variables est dans le segment de stack”, donc je suppose que c’est lorsque les variables sont réellement initialisées à une valeur. Droite?

void test_function(int a, int b, int c, int d) { int flag; //is it this char buffer[10];// and this //or flag = 31337; //this and buffer[0] = 'A'; //this. Or all of it? } int main() { test_function(1, 2, 3, 4); } 

flag , buffer , et a,b,c,d seront sur la stack (le compilateur peut simplement supprimer tout le code et l’appeler comme code mort, car il n’est pas utilisé).

Les différentes normes C ne font pas référence à une stack, mais à une durée de stockage de trois types (statique, automatique et alloué). Dans ce cas, l’ flag et le buffer ont une durée de stockage automatique. Sur les systèmes les plus courants, les objects qui ont une durée de stockage automatique seront alloués sur la stack, mais vous ne pouvez pas assumer cela universellement.

La durée de vie des objects automatiques commence lorsque vous entrez dans l’étendue et se termine lorsque vous quittez cette dernière. Dans ce cas, votre scope correspond à la fonction test_function . Donc, en supposant qu’il y ait une stack, puis un buffer et un flag dans la plupart des situations que j’ai vues, il y aura un espace alloué sur la stack pour les objects lorsque vous entrez dans la fonction, cela suppose qu’aucune optimisation ne soit effectuée.

Les objects avec une durée de stockage automatique ne sont pas initialisés explicitement, vous ne pouvez donc pas déterminer leurs valeurs initiales que vous devez d’abord leur affecter.

Par souci d’exhaustivité, les différentes durées de stockage sont décrites dans le projet de norme C99, section 6.2.4 stockage des objects. Le paragraphe 1 dit ceci (c’est moi qui souligne ):

Un object a une durée de stockage qui détermine sa durée de vie. Il existe trois durées de stockage: statique, automatique et alloué . Le stockage alloué est décrit en 7.20.3.

La durée de vie des objects automatiques est couverte au paragraphe 5 qui dit:

Pour un tel object qui n’a pas de type tableau de longueur variable, sa durée de vie s’étend de l’entrée dans le bloc auquel il est associé jusqu’à l’exécution de ce bloc de quelque manière que ce soit. […]