對於棧這種數據結構,大家應該不會陌生,它是一種後進先出的數據結構。在一般的計算機系統中,棧存在著兩種存放數據的方式,一種是向上增長的,一種是向下增長的,如圖1所示。
vc/yPC9wPg0KPHA+1NrNvDG1xChhKdbQo6zVu8rHz/LJz9T2s6S1xKOsvLTK/b7dQbbU06a1xLXY1rfQodPayv2+3UK21NOmtcS12Na3o7vU2s28MbXEKGIp1tCjrNW7ysfP8s/C1PazpLXEo6y8tMr9vt1BttTTprXEtdjWt7Tz09rK/b7dQrbU06a1xLXY1rehozwvcD4NCjxwPsTHw7SjrM7Sw8fU9dH5wLSy6b+0KNfuusPTw7PM0PIp19S8usv5yrnTw7XEz7XNs9bQtcTVu7XE1PazpLe9z/K1vbXXyvTT2sTE0rvW1sTYo78o16KjutXiysfO0sW8yLvU2s34yc+/tLW9tcTSu7j2zsrM4qGjKTwvcD4NCjxwPs7Sw8fWqrXAo6zX986q0rvW1rOj08O1xMr9vt294bm5o6zVu9b30qrTw9PatOa3xbPM0PLW0LXEvtayv7Hkwb+6zbqvyv21xMrkyOuyzsr9oaPEx8O0o6zO0sPHvs2/ydLUyei8xtK7uPazzNDyo6zU2rPM0PLW0M2ouf2xyL3PxLPSu7j2vtayv7Hkwb+1xMewuvPBvbTOtcS12Na31rXAtMXQts/Vu7XE1PazpLe9z/Kho8D708PV4rj2z+u3qLHg0LSz9sC0tcSzzNDyyOfPwsv5yr6jujwvcD4NCjxwcmUgY2xhc3M9"brush:java;">
/**********************************************************************
* 版權所有 (C)2015, Zhou Zhaoxiong。
*
* 文件名稱:FindStackDirection.c
* 文件標識:無
* 內容摘要:查看棧的增長方向
* 其它說明:無
* 當前版本:V1.0
* 作 者:Zhou Zhaoxiong
* 完成日期:20151202
*
**********************************************************************/
#include
我們可以看到,函數FindStackDirection中出現了遞歸調用,即首次進入該函數的時候,將iStackAddr變量(局部變量)的地址值賦給pStackAddr,第二次進入該函數的時候,用新的iStackAddr變量的地址值與第一次進入該函數時iStackAddr變量的地址值相比較,如果前者大於後者,那麼說明棧增長方向是向上的,否則,說明棧增長方向是向下的。
將以上代碼上傳到Linux機器上,使用“gcc -g -o FindStackDirection FindStackDirection.c”命令對程序進行編譯之後,運行“FindStackDirection”命令,結果如下:
Stack grows down!
即我所使用的系統中的棧的增長方向是向下的。大家也可以將以上代碼在自己的系統中運行一下,看看結果是什麼。
在大部分人(包括我)的印象中,棧的增長方向只有一種,那就是向上(如圖1中的(a)),但程序運行出來的結果與我們預期的恰恰相反。從這點也可以看出,計算機系統在設計上的精妙與復雜,裡面有很多東西都值得我們細細研究的。