XIVN1987 发表于 2012-4-11 15:59:28

求教高人:栈会不会被MDK特意放到所有全局变量的后面去


我一直认为,Keil MDK中的链接器会特意将栈放到RAM中的所有的全局变量之后,但是现在有一位同仁不同意这个观点,
他的观点是:栈空间不一定要放在全局变量后头,就算碰巧被链接器放在后面也是巧合

希望高人可以为我等菜鸟上一课,讲解讲解。。。


此一帖的具体起因见:http://www.ourdev.cn/forum.php?mod=viewthread&tid=5465782&pid=5736798&page=1&extra=#pid5736798

dr2001 发表于 2012-4-11 16:05:34

你的看法不对,自己实验一下就知道了。

为了栈定义,MDK/RVCT专门在Scatter中有如下语法:
MAIN_STACK          0x20000000+2*1024   EMPTY   -2048
{}

XIVN1987 发表于 2012-4-11 16:37:02

有结论了,我是错的,
"bluelucky"大侠的观点是对的,即“栈空间不一定要放在全局变量后头,就算碰巧被链接器放在后面也是巧合"

mored 发表于 2012-4-11 16:39:04

栈的尺寸、位置都是可以指定的。
一般栈放在ram的最高端(这不是碰巧),主要是因为栈是向下(低端)生长的,放在高端可以较好地避免栈溢出带来的副作用。

XIVN1987 发表于 2012-4-11 16:57:17

mored 发表于 2012-4-11 16:39 static/image/common/back.gif
栈的尺寸、位置都是可以指定的。
一般栈放在ram的最高端(这不是碰巧),主要是因为栈是向下(低端)生长的 ...

”一般栈放在ram的最高端(这不是碰巧),主要是因为栈是向下(低端)生长的,放在高端可以较好地避免栈溢出带来的副作用。“

我以前也是你这种想法,不过,现在我的想法改变了,建议看看下面的帖子里面的内容:
http://www.ourdev.cn/forum.php?mod=viewthread&tid=5465782&page=1#pid5736964

尤其看一下,bluelucky和dr2001两位大侠的回帖,,你的看法会改变的,,,

Wxy8030 发表于 2012-4-11 17:30:02

标记一下,等仔细研究一下再来回复!

gnail092 发表于 2021-4-13 12:12:19

XIVN1987 发表于 2012-4-11 16:57
”一般栈放在ram的最高端(这不是碰巧),主要是因为栈是向下(低端)生长的,放在高端可以较好地避免栈 ...

这个帖子的链接还能找到吗

XIVN1987 发表于 2021-4-13 13:20:34

gnail092 发表于 2021-4-13 12:12
这个帖子的链接还能找到吗


https://www.amobbs.com/thread-5465782-1-1.html

gnail092 发表于 2021-4-13 13:22:18

XIVN1987 发表于 2021-4-13 13:20
https://www.amobbs.com/thread-5465782-1-1.html

谢谢,我已经在你的帖子里找到,{:smile:}

tomzbj 发表于 2021-4-13 15:26:14

keil我不知道, gcc都是在lds文件里指定的, 你的lds文件里怎么写它怎么放。
页: [1]
查看完整版本: 求教高人:栈会不会被MDK特意放到所有全局变量的后面去