首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

对堆栈增长方向的一些疑点

2013-09-09 
对堆栈增长方向的一些疑问?个人对堆栈的增长方向有以下两点疑问:1、各种CPU是不是所对应的堆栈的增长方向是

对堆栈增长方向的一些疑问?
个人对堆栈的增长方向有以下两点疑问:
1、各种CPU是不是所对应的堆栈的增长方向是固定的?
2、如何确认当前平台下堆栈的增长方向?是不是通过程序来判断?
谢谢你的关注!
[解决办法]
1.不固定
2.程序判断,做静态变量(栈变量),比地址高低
[解决办法]
 不是固定的 !!! 编译器判断呀
[解决办法]
进程地址空间,堆和栈要分开而论,二者对向增加!
堆是自底而上,栈是自顶而下增长!
参考资料《linux 内核设计与实现》第14章——进程地址空间
[解决办法]
1、各种CPU是不是所对应的堆栈的增长方向是固定的?
不固定
2、如何确认当前平台下堆栈的增长方向?是不是通过程序来判断?
最好的方法是看CPU体系结构,几乎每种体系都会对堆栈有所描述.
可以通过程序判断,但是直接反汇编更快,不用你写测试代码.
[解决办法]

int up_down;
__asm {
 push ebx
 push ecx
 mov eax,esp
 mov ebx,eax
 push eax
 mov eax,esp
 mov ecx,eax
 pop eax
 mov up_dwon,1
 cmp ebx,ecx
 ja lbnext
 mov up_dwon,0
lbnext: 
 pop ecx
 pop ebx
}

[解决办法]
引用:
1、各种CPU是不是所对应的堆栈的增长方向是固定的?
不固定
2、如何确认当前平台下堆栈的增长方向?是不是通过程序来判断?
最好的方法是看CPU体系结构,几乎每种体系都会对堆栈有所描述.
可以通过程序判断,但是直接反汇编更快,不用你写测试代码.


看看 push 和 pop

比如 push S 就是:
Reg[%esp] <-- Reg[%esp] - 4;  
Mem[Reg[%esp]]<--  S
[解决办法]
引用:
进程地址空间,堆和栈要分开而论,二者对向增加!
堆是自底而上,栈是自顶而下增长!
参考资料《linux 内核设计与实现》第14章——进程地址空间

我在《现代操作系统》中看进程地址空间:数据段向上增长,堆栈向下增长?
[解决办法]
把内存想象成一个竖条, 上面是低地址, 下面是高地址.
则栈的开口向上(向低地址增长), 堆的开口向下(向高地址增长);
也就是说在一个程序里, 声明一个局部变量, 再声明一个局部变量, 后声明的在栈的上面, 地址会更小.
但这是一般的情况.

所以:
1. 不固定
2. 是用小程序来判断
------解决方案--------------------


引用:
Quote: 引用:

进程地址空间,堆和栈要分开而论,二者对向增加!
堆是自底而上,栈是自顶而下增长!
参考资料《linux 内核设计与实现》第14章——进程地址空间

我在《现代操作系统》中看进程地址空间:数据段向上增长,堆栈向下增长?


存在这种可能性!至少我可以保证linux当中是我说的这种情况!

热点排行