LiteOS中有个函数:
osTskStackInit( )函数
功能:初始化TASK的栈空间。栈顶在内存低地址位置,栈底在内存高地址位置???
ahhhh!什么以前的在Linux下编程栈不都是连续的从低地址开始分配内存空间吗。也不墨迹区区搜了一下,答案如下:
我看的LiteOS是跑在ARM M4上的,这个mcu的内存分配就是在内存中自减的形式。
内存地址:小 --------------------------------------->>大
Stack_high<<------------------------------------------Stack_low
(栈顶)---------------------------------------------------(栈底)
怎么样这么简洁的图片哈哈哈,意思呢就是,栈底从内存的高地址开始,然后栈指针(R13)sp会自减,往栈顶(低地址)方向分配。
关于栈指针这篇文章http://www.eepw.com.cn/article/201611/321963.htm不错
言归正转,因此呢栈的内存分配的方向还真不是固定的,需要具体的情况具体分析:
栈向什么方向增长取决于操作系统与CPU的组合。x86硬件直接支持的栈确实是“向下增长”的:push(入栈)指令导致sp自减一个slot,pop(出栈)指令导致sp自增一个slot。其它硬件有其它硬件的情况。(哈哈借用一大神的总结)!
推荐一篇关于内存的文章https://kb.cnblogs.com/page/66608/不错!