如何判斷乙個棧的增長方向

2021-05-22 16:29:08 字數 495 閱讀 6102

乙個很直觀的做法就是說在乙個函式中定義兩個變數,把這兩個變數的位址進行比較,但是這種方法是和編譯器相關的,如果不同編譯器對區域性變數的壓棧方式不一樣,則無法判斷,因此這種方法是不可移植的。

以下是一種很可移植的方法,好像是哪個大牛寫的,確實值得學習,函式呼叫函式,被呼叫的函式壓棧肯定在呼叫者之後,因此記錄:

#includestatic void find_stack_direction(void); 

static int stack_dir;

int main(void)

static void find_stack_direction (void) else /* second entry */if (&dummy > addr) stack_dir = 1; /* stack grew upward */

else stack_dir = -1; /* stack grew downward */

}

如何判斷棧的增長方向?

如何判斷棧的增長方向?對於乙個用慣了i386系列機器的人來說,這似乎是乙個無聊的問題,因為棧就是從高位址向低位址增長。不過,顯然這不是這個問題的目的,既然把這個問題拿出來,問的就不只是i386系列的機器,跨硬體平台是這個問題的首先要考慮到的因素。在乙個物質極大豐富的年代,除非無路可退,否則我們堅決不...

判斷棧的增長方向

dreamhead老大曾經討論過這個問題,尋找一種可移植的方式來判斷棧的增長方向,見 棧的增長方向 今天在讀ruby hacking guide第5章,介紹alloca函式的部分,提到ruby實現的c語言版本的alloca.c,讀了下 發現這裡倒是實現了乙個很漂亮的函式用於 實現判斷棧的增長方向,利...

系統棧的增長方向判斷

函式呼叫時引數入棧,因此可以定義兩個函式,分別輸出引數位址,以此來確定棧的生長方向。cpp view plain copy print?確定棧的生長方向 自定義函式fun1 和fun2 其中fun1 內部呼叫fun2 輸出引數位址 include void fun2 intb void fun1 i...