2012-06-24 105 views
1

參考下面的鏈接說明如何找到機器堆棧是否在內存中增長...我想知道下面是否是正確的方法來查找機器的堆在記憶中增長或減少。查找堆是否長大

How would you find out if a machine’s stack grows up or down in memory? (JAVA)

我的代碼

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); 

    } 

,並呼籲像這樣

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

這此功能爲我的機器上輸出..

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

或者這個問題不明確,因爲堆永遠不能向下增長?

回答

2

你不需要函數調用來測試堆的東西。這是linked question about the direction of the stack中的原因,因爲編譯器可能會在單個幀(或函數)內對堆棧中的變量進行重新排序。它不會爲函數調用這麼做,所以兩個連續的malloc()調用之間沒有方法調用,將與您的示例一樣有效。

但是,與鏈接問題中數字之間的差異相比,示例中數字之間的差異較大。這個堆確實在一個方向上增長,但這並不意味着兩個相鄰的malloc()調用將會改變地址值,這意味着方向 - 這更多的是一個大趨勢。

堆棧和堆向對方增長。找出堆的增長方向的最簡單的方法是找出棧的走向(你從鏈接問題得到的)並知道堆在另一個方向上增長。

+0

謝謝羅伯特。這有幫助。 ! – Jiten