JS技术

查找栈的增长方向的分析及C代码实现 - 周兆熊的专栏 - 博客频道 - CSDN.NET 周兆熊的专栏 2015年度“博

字号+ 作者:H5之家 来源:H5之家 2015-12-14 15:15 我要评论( )

原文:http://www.cnblogs.com/Charles-Zhang-Blog/p/3529980.htmlMySQL没有专门针对ARM的版本,移植到ARM没有官方文档可参考,因此,暂时参考这样一篇文档: ht

对于栈这种数据结构,大家应该不会陌生,它是一种后进先出的数据结构。在一般的计算机系统中,栈存在着两种存放数据的方式,一种是向上增长的,一种是向下增长的,如图1所示。

这里写图片描述


图1 栈的两种增长方向

在图1的(a)中,栈是向上增长的,即数据A对应的地址小于数据B对应的地址;在图1的(b)中,栈是向下增长的,即数据A对应的地址大于数据B对应的地址。

那么,我们怎样来查看(最好用程序)自己所使用的系统中的栈的增长方向到底属于哪一种呢?(注:这是我偶然在网上看到的一个问题。)

我们知道,作为一种常用的数据结构,栈主要用于存放程序中的局部变量和函数的输入参数。那么,我们就可以设计一个程序,在程序中通过比较某一个局部变量的前后两次的地址值来判断栈的增长方向。利用这个想法编写出来的程序如下所示:

/版权所有 (C)2015, Zhou Zhaoxiong。 * * 文件名称:FindStackDirection.c * 文件标识:无 * 内容摘要:查看栈的增长方向 * 其它说明:无 * 当前版本:V1.0 * 作 者:Zhou Zhaoxiong * 完成日期:20151202 * / #include <stdio.h> // 重定义数据类型 typedef unsigned char UINT8; typedef signed int INT32; // 函数声明 void FindStackDirection(void); /功能描述:主函数 * 输入参数:无 * 输出参数:无 * 返 回 值:无 * 其它说明:无 * 修改日期 版本号 修改人 修改内容 * --------------------------------------------------------------- * 20151202 V1.0 Zhou Zhaoxiong 创建 */ INT32 main() { FindStackDirection(); return 0; } /功能描述:查找栈增长方向 * 输入参数:无 * 输出参数:无 * 返 回 值:无 * 其它说明:无 * 修改日期 版本号 修改人 修改内容 * --------------------------------------------------------------- * 20151202 V1.0 Zhou Zhaoxiong 创建 */ void FindStackDirection(void) { }

我们可以看到,函数FindStackDirection中出现了递归调用,即首次进入该函数的时候,将iStackAddr变量(局部变量)的地址值赋给pStackAddr,第二次进入该函数的时候,用新的iStackAddr变量的地址值与第一次进入该函数时iStackAddr变量的地址值相比较,如果前者大于后者,那么说明栈增长方向是向上的,否则,说明栈增长方向是向下的。

将以上代码上传到Linux机器上,使用“gcc -g -o FindStackDirection FindStackDirection.c”命令对程序进行编译之后,运行“FindStackDirection”命令,结果如下:

Stack grows down!

即我所使用的系统中的栈的增长方向是向下的。大家也可以将以上代码在自己的系统中运行一下,看看结果是什么。

在大部分人(包括我)的印象中,栈的增长方向只有一种,那就是向上(如图1中的(a)),但程序运行出来的结果与我们预期的恰恰相反。从这点也可以看出,计算机系统在设计上的精妙与复杂,里面有很多东西都值得我们细细研究的。

原文中的代码已提到了GitHub上,欢迎下载阅读:https://github.com/zhouzxi/FindStackDirection

  • 上一篇租房&考驾照—一个程序员的成长史(5)
  • 下一篇ORACLE调用接口(OCI)简介及重要函数流程介绍
  • 顶 2 踩 1

    我的同类文章

    猜你在找

    查看评论

    * 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

    2015年博客之星投票 单击下面的文字,为我投票,谢谢~~

    投票地址

    我的微信 与本人单独交流~~

    个人资料


    zhouzxi

  • 访问:566803次
  • 积分:12174
  • 等级:

    积分:12174

  • 排名:第556名
  • 《C程序员从校园到职场》


    京东  china-pub  亚马逊  当当网


    试读章节  豆瓣


    《信息通信技术百科全书》

    京东商城   china-pub

    博客专栏

    一个程序员的成长史

    文章:5篇

    阅读:3784

    IT读者问答

    文章:30篇

    阅读:31450

    软件项目实践中的C语言一瞥

    文章:41篇

    阅读:62360

    我的微博

    友情链接 周兆熊的独立博客
    周兆熊的微博
    周兆熊的GitHub

    文章搜索

     

    1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

    相关文章
    • Javascript实现页内查找关键词实例_javascript教程教程

      Javascript实现页内查找关键词实例_javascript教程教程

      2015-10-06 10:04

    • 中规中矩简单版四方向无缝滚动_Javascript教程

      中规中矩简单版四方向无缝滚动_Javascript教程

      2015-10-02 12:00

    • Javascript判断滚轮滚动方向_Javascript教程

      Javascript判断滚轮滚动方向_Javascript教程

      2015-10-01 11:00

    • jquery 查找iframe父级页面元素的实现代码_Javascript教程

      jquery 查找iframe父级页面元素的实现代码_Javascript教程

      2015-09-17 17:10

    网友点评
    (