Nach meinem besten Verständnis wird der Stapel nach unten wachsen.Wächst mein Stapel nach oben statt nach unten?
Ich habe versucht, diesen Code auszuführen:
#include<stdio.h>
void func(char* a1, int a2, int a3) {
char b1[10];
int b2;
int b3;
printf("a3 address is: %p\n", &a3);
printf("a2 address is: %p\n", &a2);
printf("a1 address is: %p\n", &a1);
printf("-----------------------\n");
printf("b1 address is: %p\n", &b1);
printf("b2 address is: %p\n", &b2);
printf("b3 address is: %p\n", &b3);
}
int main() {
func("string",2,3);
return 0;
}
Und das Ergebnis war nicht wie ich erwartet hatte:
a3 address is: 0x7fff68473190
a2 address is: 0x7fff68473194
a1 address is: 0x7fff68473198
-----------------------
b1 address is: 0x7fff684731b0
b2 address is: 0x7fff684731a8
b3 address is: 0x7fff684731ac
ich
b1
, erwarte nicht, dass
b2
, b3
im selben bestellt werden So habe ich sie erklärt. Ich verstehe, dass der Compiler diese Reihenfolge ändern kann, um Optimierungen und Alignment zu ermöglichen, aber warum scheint es, als ob der Stack zu hohen Adressen statt zu niedrigeren Adressen wächst?
Sie Variablen in einem einzigen Stack-Rahmen, nicht einzelnen Stapelrahmen zu vergleichen ... –