成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

一個有趣的計算機系統(tǒng)問題---判斷棧的增長方向

開發(fā) 開發(fā)工具
本文將講解一個有趣的計算機系統(tǒng)問題---判斷棧的增長方向。

最近,我在某技術論壇上看到一個有趣的問題:如何判斷計算機系統(tǒng)中棧的增長方向?

首先讓我簡單介紹一下這個問題的背景。對于棧這種數(shù)據結構,大家應該不會陌生,它是一種后進先出的數(shù)據結構。據說,在一般的計算機系統(tǒng)中,棧存在著兩種存放數(shù)據的方式,一種是向上增長的,一種是向下增長的,如圖1所示。

棧的兩種增長方向

圖1 棧的兩種增長方向

在圖1的(a)中,棧是向上增長的,即數(shù)據A對應的地址小于數(shù)據B對應的地址;在圖1的(b)中,棧是向下增長的,即數(shù)據A對應的地址大于數(shù)據B對應的地址。那么,我們怎樣來判斷自己所使用的系統(tǒng)中的棧的增長方向到底屬于哪一種呢?

我們知道,作為一種常用的數(shù)據結構,棧主要用于存放程序中的局部變量和函數(shù)的輸入參數(shù)。那么,我們就可以設計一個程序,在程序中通過比較某一個局部變量的前后兩次的地址值來判斷棧的增長方向。利用這個想法編寫出來的程序如下所示:

  1. /********************************************************************** 
  2. * 版權所有 (C)2017, Zhou Zhaoxiong。 
  3. * 文件名稱:FindStackDirection.c 
  4. * 文件標識:無 
  5. * 內容摘要:判斷棧的增長方向 
  6. * 其它說明:無 
  7. * 當前版本:V1.0 
  8. * 作    者:Zhou Zhaoxiong 
  9. * 完成日期:20170630 
  10. **********************************************************************/ 
  11. #include <stdio.h> 
  12.  
  13. // 函數(shù)聲明 
  14. void FindStackDirection(void); 
  15.  
  16. /********************************************************************** 
  17. * 功能描述:主函數(shù) 
  18. * 輸入參數(shù):無 
  19. * 輸出參數(shù):無 
  20. * 返 回 值:無 
  21. * 其它說明:無 
  22. * 修改日期           版本號      修改人                  修改內容 
  23. * --------------------------------------------------------------------------- 
  24. * 20170630         V1.0     Zhou Zhaoxiong          創(chuàng)建 
  25. ***********************************************************************/ 
  26. int main() 
  27.     FindStackDirection(); 
  28.  
  29.     return 0;  
  30.  
  31.  
  32. /********************************************************************** 
  33. * 功能描述:查找棧增長方向 
  34. * 輸入參數(shù):無 
  35. * 輸出參數(shù):無 
  36. * 返 回 值:無 
  37. * 其它說明:無 
  38. * 修改日期         版本號          修改人              修改內容 
  39. * -------------------------------------------------------------------------------- 
  40. * 20170630        V1.0     Zhou Zhaoxiong          創(chuàng)建 
  41. ***********************************************************************/ 
  42. void FindStackDirection(void) 
  43.     char  iStackAddr            = 0;            // 用于獲取棧地址 
  44.     static char *pStackAddr = NULL;     // 用于存放***個iStackAddr的地址  
  45.  
  46.     if (pStackAddr == NULL)               // ***次進入 
  47.     {                           
  48.         pStackAddr = &iStackAddr;        // 保存iStackAddr的地址 
  49.         FindStackDirection();                 // 遞歸  
  50.     } 
  51.     else                                 // 第二次進入  
  52.     {   
  53.         if (&iStackAddr > pStackAddr)        // 第二次iStackDirection的地址大于***次iStackDirection, 那么說明棧增長方向是向上的 
  54.         {    
  55.             printf("Stack grows up!\n"); 
  56.         } 
  57.         else if (&iStackAddr < pStackAddr)   // 第二次iStackDirection的地址小于***次iStackDirection, 那么說明棧增長方向是向下的 
  58.         {   
  59.             printf("Stack grows down!\n"); 
  60.         } 
  61.         else 
  62.         { 
  63.             printf("Bad stack!\n"); 
  64.         } 
  65.     } 

我們可以看到,函數(shù)FindStackDirection中出現(xiàn)了遞歸調用,即***進入該函數(shù)的時候,將iStackAddr變量(局部變量)的地址值賦給pStackAddr,第二次進入該函數(shù)的時候,用新的iStackAddr變量的地址值與***次進入該函數(shù)時iStackAddr變量的地址值相比較,如果前者大于后者,那么說明棧增長方向是向上的,否則,說明棧增長方向是向下的。

將以上代碼上傳到Linux機器上,使用“gcc -g -o FindStackDirection FindStackDirection.c”命令對程序進行編譯之后,運行“FindStackDirection”命令,結果如下:

  1. Stack grows down! 

即我所使用的系統(tǒng)中的棧的增長方向是向下的。大家也可以將以上代碼在自己的系統(tǒng)中運行一下,看看結果是什么。

在大部分人(包括我)的印象中,棧的增長方向只有一種,那就是向上(如圖1中的(a)),但程序運行出來的結果與我們預期的恰恰相反。從這點也可以看出計算機系統(tǒng)在設計上的精妙與復雜,里面有很多東西都值得我們細細研究的。

【本文是51CTO專欄作者周兆熊的原創(chuàng)文章,作者微信公眾號:周氏邏輯(logiczhou)】

戳這里,看該作者更多好文

責任編輯:趙寧寧 來源: 51CTO專欄
相關推薦

2014-04-10 09:40:51

System 360計算機計算機系統(tǒng)

2018-07-05 09:25:07

系統(tǒng)存儲層次

2022-03-30 15:25:28

鏈接過程計算機系統(tǒng)程序

2019-01-14 11:10:43

機器學習人工智能計算機

2010-08-18 08:53:53

Scala

2009-01-05 13:07:54

軟件設計師計算機系統(tǒng)

2016-05-09 10:46:27

2015-12-11 10:02:51

2011-07-25 13:34:08

ORACLEFLASHBACK T

2012-09-12 09:59:26

云計算超級計算機數(shù)據中心

2020-09-17 10:25:36

計算機系統(tǒng) 技術

2009-07-04 09:38:07

2009-10-21 13:27:32

2009-04-17 15:30:22

2020-07-22 14:45:20

2010-04-02 09:42:24

2011-05-19 09:39:51

數(shù)據庫計算機

2009-01-05 13:23:25

軟件設計師筆記

2009-02-10 09:32:01

2013-09-30 10:03:00

計算機管理桌面虛擬化
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久免费大片 | 日韩一区二区视频 | 久久新| 国产一区二区欧美 | 美美女高清毛片视频免费观看 | 蜜桃在线视频 | 91福利在线观看视频 | 一区二区三区国产精品 | 在线看片网站 | 一级片视频免费观看 | 九九色综合 | 亚洲免费一区二区 | 日韩高清中文字幕 | 色姑娘综合网 | 亚洲91| 国产精品女人久久久 | 九九热这里只有精品6 | 性欧美精品一区二区三区在线播放 | 日本久久久久久 | 人人叉 | av黄色在线 | 欧美8一10sex性hd | 欧美在线a| 国产精品久久久久久久一区二区 | 天堂在线中文 | 成人精品一区二区户外勾搭野战 | 久久av综合 | 国产欧美一区二区精品久导航 | 亚洲高清在线 | 久久国产婷婷国产香蕉 | 中文字幕1区2区3区 亚洲国产成人精品女人久久久 | 国产精品高清在线 | 一区二区三区观看视频 | 日韩三区在线观看 | 97色免费视频 | 精品国产一区二区三区av片 | 99久久99 | 色综合桃花网 | 亚洲一区二区三区久久 | 亚洲国产精品视频 | 免费在线观看成年人视频 |