Je l'exécution de ce code Cordre d'allocation sur la pile
#define STACKSIZE 65536
char d[STACKSIZE];
if (((int) &d[STACKSIZE-1]) - ((int) &d[0]) + 1 != STACKSIZE) {
Printf ("Stack space reservation failed\n");
Exit();
}
printf("Allocated from %d to %d so for %d bytes\n", &d, d+sizeof(d), sizeof(d));
auto int a = 3;
printf("Now the stack pointer is on %d\n",&a);
Et j'obtenir en sortie de Numéroté -4262832 à -4197296 donc pour 65536 octets Maintenant, le pointeur de la pile est sur -4262836
Cela signifie que la variable "a" est placée sur la pile APRES le tableau. Mais si j'utilise un tableau de longueur variable (un tableau dont la longueur est définie dans l'exécution), j'ai le comportement inverse: a est placé sur la pile AVANT le tableau.
Ceci est le code (il est le même, mais la taille de la matrice est paramétré dans l'exécution)
#define STACKSIZE 65536
int i = 1;
char d[i*STACKSIZE];
if (((int) &d[STACKSIZE-1]) - ((int) &d[0]) + 1 != STACKSIZE) {
Printf ("Stack space reservation failed\n");
Exit();
}
printf("Allocated from %d to %d so for %d bytes\n", &d, d+sizeof(d), sizeof(d));
auto int a = 3;
printf("Now the stack pointer is on %d\n",&a);
Ceci est la sortie
Numéroté de -4262856 -4197320 de sorte à 65536 octets Maintenant le pointeur de pile est sur -4197312
Alors, quel est le problème? Comment puis-je le résoudre (en utilisant un tableau de longueur variable et en mettant des variables sur la pile après).
Merci!
Pouvez-vous s'il vous plaît formater le code et mettre dans la balise appropriée pour indiquer quelle langue. Si c'est C, le non Printf avec un P majuscule - puis corriger le code pour le rendre plus clair pour les autres à lire s'il vous plaît? – t0mm13b