C语言,获得堆栈增长方向的一种方法
转载:http://blog.chinaunix.net/uid-2413049-id-109836.html
在阅读wget源代码的过程中,发现一个用C语言实现,获得堆栈增长方向的巧妙方法
wget版本为1.11.4
实现代码:
static void find_stack_direction () { static char *addr = NULL; /* Address of first `dummy', once known. */ auto char dummy; /* To get stack address. */ if (addr == NULL) find_stack_direction (); /* Recurse once. */ |
简化后的相关定义:
static int stack_dir; /* 1 or -1 once known. */
#define ADDRESS_FUNCTION(arg) &(arg) |
find_stack_direction函数使用函数递归的方法
第一次进入,由于addr为NULL,所以将字符变量dummy的地址赋值给静态变量addr
第二次进入,由于静态变量addr已赋了值,所以进入 "Second entry."
接着,将第二次进入的dummy地址和第一次进入的dummy地址相比较
如果值为正,则堆栈向高地址增长;否则,堆栈向低地址增长
巧妙地运用了“函数递归也使用了堆栈”的思想 ,漂亮 :)
转载于:https://www.cnblogs.com/pengdonglin137/articles/4620576.html
C语言,获得堆栈增长方向的一种方法相关推荐
- linux中复制字符串出错,C语言实现字符串的复制的两种方法
本文将要为您介绍的是C语言实现字符串的复制的两种方法,具体操作方法: 利用数组实现 1 #include 2 #include 3 4 void copy_string(char str1[],cha ...
- c语言中字符串去掉逗号,JS四种方法去除字符串最后的逗号
window.οnlοad=function() { var obj = {name: "xxx", age: 30, sex: "female"};//定义一 ...
- python语言入门自学-自学编程的6种方法,自学Python
随着互联网日趋迅猛,编程已经在我们生活当中无处不在了.众所周知,程序员的工资都很不错,于是越来越多的人,都想加入到编程的行业中来.那么如何加入到程序员的行业当中? PHP从入门到放弃,C语言从入门到放 ...
- c语言能返回字符串吗,C语言中函数返回字符串的四种方法
在讨论着四种方法以前,首先要对函数有一个简单的认识,不管是在形实结合时,仍是在return语句返回时,都有一个拷贝的过程.你传进来的参数是个值,天然函数在工做以前要把这个值拷贝一份供本身使用,你传进来 ...
- 懒人修仙传ce修改方法_盘点《西游记》中增长寿命的6种方法,其中长生不老的方法有三种...
长生不老是每个人梦寐以求的事情,古代那么多皇帝没事就请道士来炼丹,不就是希望自己能长生不老么,结果不仅没长生不老,反而因丹毒而英年早逝.而这种思想,也是深深的影响着诸多小说,比如<西游记> ...
- 易语言运行执行exe文件的三种方法
易语言一个很初级的问题 ,如何运行exe文件,可以进行游戏的一键启动,软件的一键启动,方便控制操作. 1.和程序同目录 如果你要运行和你程序同目录下的 "****.exe",就用下 ...
- C语言中字符数组初始化的几种方法
欢迎关注我的微信公众号:CurryCoder的程序人生 1.C语言中的字符数组初始化 在C语言中,字符串是当做字符数组来处理的:所以字符串有两种声明方式,一种是字符数组,一种是字符指针. 1.1 直接 ...
- 二分法求解方程的根java_C语言二分法求解方程根的两种方法
本文实例为大家分享了C语言二分法求解方程根的具体代码,供大家参考,具体内容如下 对于二分法求根,其实和弦截法思想很像,甚至更简单. 原理:先看如下的图 A,B两个点为跟的一个边界,通过一直缩小跟的边界 ...
- java实现c语言的函数_C语言实现返回字符串函数的四种方法
前言 C语言返回字符串函数共有四种方式,分别如下: 使用堆空间,返回申请的堆地址,注意释放 函数参数传递指针,返回该指针 返回函数内定义的静态变量(共享) 返回全局变量 下面来看看详细的介绍 其实就是 ...
最新文章
- ❤️手撕这十道HiveSQL题还不能吊打面试官,却能保你不被吊打❤️【推荐收藏】
- 打包解决方案后,安装时提示只能在IIS5.1以上运行解决方法
- 【django轻量级框架】用Mysql的各种项目响应速度慢?一招解决!
- 2-29 while
- boost::depth_first_search用法的测试程序
- UDLD(Unidirectional Link Detection)
- poj3723Conscription
- 如何在Java中将图像上传到DropBox
- 职场七种最致命的想法
- css删除li 圆点_CSS中li圆点样式
- 用ZK UI解决storm 读取Kafka时的Fetch offset *** is out of range for topic , resetting offset
- python 单因子方差分析_假设检验之F检验-方差分析
- linux 命令 dd 详解
- 刻意学习:持续行动让你人生逆袭
- php 量化交易 开源,hikyuu开源量化交易研究框架 v1.0
- kelvin 四线连接电阻测试法
- 数据可视化项目【三】数据切换效果模块
- 【算法】阿里精准推广的核心算法MLR
- 微信小程序消息推送、接收消息事件、发送客服消息
- 文章管理系统 -- Express学习