如何确定栈的增长方向地址是递增还是递减
2016-03-20 21:43
579 查看
#include<stdio.h> static int stack_dir; static void find_stack_direction (void) { static char *addr = NULL; /* address of first `dummy', once known */ char dummy; /* to get stack address */ if (addr == NULL) { /* initial entry */ addr = &dummy; find_stack_direction (); /* recurse once */ } else /* second entry */ if (&dummy > addr) stack_dir = 1; /* stack grew upward */ else stack_dir = -1; /* stack grew downward */ } int main(void) { find_stack_direction(); if(stack_dir==1) puts("stack grew upward"); else puts("stack grew downward"); return 0; }
解释:过程中使用了递归,在第一次addr指向的是dummy变量的地址,递归时,会将dummy压栈,第二次的时候dummy的地址也会在栈里面,这时候比较前后两次压栈的地址,就能够知道栈中地址的增长方向是向上还是向下。
在内存管理中,与栈对应是堆。对于堆来讲,生长方向是向上的,也就是向着内存地址增加的方向;对于栈来讲,它的生长方式是向下的,是向着内存地址减小的方向增长。在内存中,“堆”和“栈”共用全部的自由空间,只不过各自的起始地址和增长方向不同,它们之间并没有一个固定的界限,如果在运行时,“堆”和 “栈”增长到发生了相互覆盖时,称为“栈堆冲突”,系统肯定垮台。
相关文章推荐
- SQL SERVER-alter语句
- 随便谈谈alphago与人机大战
- 【三层】C#版实战演练
- bash脚本编程(二)
- 数据结构 线性表的顺序储存结构
- Merit技术人员价值管理系统——完善编辑结构
- xabbix安装配置
- css中px和em的区别
- ios cordova如何加载远程界面?
- EventBus框架的使用
- C++面向对象高级编程(下)-Geekband
- 线程通信
- JAVA--List的应用
- android UIImageview
- 20145302张薇《Java程序设计》第三周学习总结
- Eclipse 软件设置相关
- 读书笔记| (一)ARM9 嵌入式学习:基础篇
- 求n的阶乘以及前n个数的阶乘和
- 据廖雪峰python3教程----python学习第四天
- 从官网下载mod_jk.so