Ordre des variables dans la stack (GCC)

Lors de la compilation du code C dans GCC, existe-t-il un moyen de garantir que les variables de la stack apparaîtront dans la stack dans l’ordre que je les déclare (ou dans l’ordre inverse, cela ne m’importe pas)? Je sais que cela est possible via structs mais je préférerais ne pas les utiliser.

Le seul moyen serait une structure qui inclut toutes les variables dans l’ordre de votre choix.

Pour les variables locales, le compilateur est libre de réorganiser / réutiliser des variables dans l’ordre de son choix. Certaines variables peuvent ne pas avoir d’emplacement de mémoire du tout, elles ne vivent que dans des registres, d’autres seront totalement optimisées.

Si vous êtes catégorique sur le fait que vous ne voulez pas utiliser de structure, vous devrez allouer vous-même la mémoire de stack avec alloca() . Mais vous devrez ensuite gérer vos variables locales manuellement dans ce bloc de mémoire de stack.

Je ne recommanderais pas que vous fassiez ceci. Utilisez une structure.

L’approche la plus fiable consiste à ordonner à gcc de produire une sortie en langage assembleur à l’aide de gcc -S , et à examiner la sortie en langage assembleur pour déterminer les variables placées où. Si vous comstackz sans optimisations, les variables ne seront probablement pas supprimées ou réorganisées, et si vous affectez des valeurs différentes à chaque variable locale, il devrait être facile de les repérer.

J’avoue que ce n’est pas très high-tech. Mais si vous voulez être sûr que gcc génère un code qui fonctionne de manière particulière, vous devrez regarder le code qu’il génère …