栈在内存中的分配

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/不错!

你可能感兴趣的:(内存管理ios)