Je joue autour de l'empilement sur un gcc exécutant le système Ubuntu 9.04 4.3.3 avec la variable de noyau randomize_va_space mis à 0 (/ proc/sys/kernel/randomize_va_space)taille du tableau Déclaration de la variable automatique de paramètre d'entrée
Si je déclare une variable auto dans une fonction qui est un tableau dont la taille est déterminée par l'entrée, comment le tableau est-il alloué sur la pile?
La fonction ressemble à ceci -
int fun(int i) {
char a[i];
char *ptr;
printf("a - %p ptr - %p\n", a, &ptr);
printf("Difference - %ld\n", ((unsigned long)&ptr - (unsigned long)a);
printf("sizeof(a) - %d\n\n", sizeof(a));
}
L'opérateur sizeof lorsqu'il est passé l'un tableau retourne la taille attendue (même -1) donc je me demandais pourquoi le tableau prend beaucoup de place sur la pile , et deuxièmement, pourquoi sizeof() renvoie -1?
La sortie ressemble à ceci -
a - 0xbffff4c0 ptr - 0xbffff4fc
Difference - 60
sizeof(a) - -1
a - 0xbffff4c0 ptr - 0xbffff4fc
Difference - 60
sizeof(a) - 0
a - 0xbffff4c0 ptr - 0xbffff4fc
Difference - 60
sizeof(a) - 1
a - 0xbffff4b0 ptr - 0xbffff4fc
Difference - 76
sizeof(a) - 2
a - 0xbffff4b0 ptr - 0xbffff4fc
Difference - 76
sizeof(a) - 3
a - 0xbffff4b0 ptr - 0xbffff4fc
Difference - 76
sizeof(a) - 4
Cela ne devrait pas compiler. Vous pouvez uniquement déclarer des tableaux de taille constante sur la pile. Normalement, vous auriez besoin de faire char * a = new char [i]; –
Je pensais aussi, mais il compile et fonctionne très bien. – aks
Je me demande quel compilateur vous utilisez ...: P –