zoek of de hoop groter wordt

Verwijzend naar de onderstaande link die uitlegt hoe te achterhalen of de machinestack hogerop in het geheugen groeit ... ik wil weten of het volgende de juiste manier is om te achterhalen of de machinehoop omhoog of omlaag groeit in het geheugen.

Hoe kom je erachter of de stapel van een machine in het geheugen omhoog of omlaag groeit? (JAVA)

mijn code

void findHeapDirection(int *a) {

   int *b;
   b = (int*)malloc(sizeof(b));  
   printf("\naddress of a %x",a);   
   printf("\naddress of b %x",&b);

   if(b > a) 
     printf("\n>>heap grows up");
   else
    printf("\n>>heap grows down");   

    free(b);

  }   

en noem deze functie als volgt

 int *a;
 a = (int*)malloc(sizeof(a));
 findHeapDirection(a);
 free(a);

dit was de uitvoer op mijn machine ..

address of a 5417b0
address of b 28ff14
>>heap grows up

Or is this question ambiguous as heap can never grow downwards?

1

1 antwoord

U hebt geen functieaanroep nodig om dingen met de heap te testen. Dat is daar in de gekoppelde vraag over de richting van de stapel omdat de compiler variabelen op de stapel binnen een frame (of functie) opnieuw kan rangschikken. Dit doet het niet voor functieaanroepen, dus twee opeenvolgende malloc() -aanroepen zonder tussenkomst van een methode zou even effectief zijn als uw voorbeeld.

Het verschil tussen de getallen in uw voorbeeld is echter groot in vergelijking met het verschil tussen getallen in de gekoppelde vraag. De heap groeit inderdaad in één richting, maar dat betekent niet dat twee aangrenzende malloc() -aanroepen een wijziging in adreswaarde hebben die die richting impliceert - het is meer een algemene trend.

De stapel en de hoop groeien naar elkaar toe. De eenvoudigste manier om erachter te komen in welke richting de hoop groeit, is om uit te zoeken in welke richting de stapel gaat (wat je hebt van de gekoppelde vraag) en weet dat de stapel in de andere richting groeit.

2
toegevoegd
Bedankt Robert. Dat hielp. !
toegevoegd de auteur Jiten, de bron