对堆栈增长方向的一些疑问?
个人对堆栈的增长方向有以下两点疑问:
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
}