打印

请教大家一下ARM局部数组入栈顺序问题

[复制链接]
3499|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lhshine|  楼主 | 2007-6-4 11:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
ARM, TE, AI
ARM为递减堆栈,局部变量存放在栈中。那么如果我的程序中有个局部变量数组,INT32U TEMP[16]; 
int8u main ()
{
INT32U TEMP[16]; 
INT32U *p1=&TEMP[0]; 
INT32U *p2=&TEMP[15]; 


虽然肯定知道p2=p1+15,但是为什么p2的值高于p1?局部变量放在堆栈中,堆栈不是递减的吗?如果是TEMP[0]先入栈,他的地址应该高于TEMP[15],难道是TEMP[15]先入栈?
可能是我哪里理解错了,恳请大家多多指教,谢谢!

相关帖子

沙发
HWM| | 2007-6-4 12:43 | 只看该作者

有必要去关心指针的具体数值吗?

使用特权

评论回复
板凳
djyos| | 2007-6-4 16:53 | 只看该作者

注意软件的可移植性

    如果你的程序与编译器如何安排局部数组在栈中的存储方式有关,那么程序的可移植性就存在问题。
首先,即使相同的编译器,它只要遵守ansi c的标准就可以了,从来不会保证以后的升级版本不会改变这个存储顺序。
其次,如果改变编译器,天知道新编译器如何使用栈的。
再次,如果你移植程序到别的cpu,问佛祖吧!

所以,最好不要关心局部数组的存储方式为妙,当作学习研究,长点见识倒是个好注意。

使用特权

评论回复
地板
平常人| | 2007-6-5 22:14 | 只看该作者

不管是局部数组还是全局数组,数组分量在内存中的顺序永

真讨厌这种一个帖子到处发的习惯,看到4楼的回答有歧义,所以再来讨论一下。

数组分量永远是下标小的在低地址端,下标大的在高地址端,即
  当x>y时  =〉 &temp[x] > &temp[y]

否则当用指针访问这个数组时,指针的++和--操作就没有意义了。这与移植无关。

但不同数组间的关系是没有一定的,是与具体的编译器和链接器的实现有关;依赖不同数组间的关系写的程序,可移植性较差。

使用特权

评论回复
5
lishuanghua| | 2007-6-5 22:36 | 只看该作者

2楼说得对,局部变量不是被压入堆栈,它只是占用堆栈空间而

使用特权

评论回复
6
djyos| | 2007-6-6 14:57 | 只看该作者

多谢平常人指正

    为了与P++操作兼容,数组确实不可能倒序排列。
    有一个搞笑的问题,如果有一个捣蛋的编译器,把P++操作也倒过来,把数组排列也倒过来,结构也由高地址开始分配,编程世界会编程怎样?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

6

帖子

0

粉丝