简述嵌入式软件中存储器管理的"堆"和"栈"的作用.

简述嵌入式软件中存储器管理的"堆"和"栈"的作用.,第1张

如果对于应用程序的开发者来说可以这样理解

应用中调用malloc这样的函数申请的内存是在堆空间中申请来的

应用中函数内部的临时变量是编译器自动修改栈指针,使用的栈空间

函数间调用,保存寄存器等现场也是自动使用的栈空间,这些对于栈的使用

都是编译器编译的时候就确定了的,不需要编程者担心,嵌入式系统中还要注意别发生栈溢出的情况。

1.即使不适用 *** 作系统,一般也要为每种模式单独设置好堆栈,因为在模式切换时,相应的寄存器组也会切换,如果某种模式下的堆栈寄存器没有设置,那么一旦进入该模式,可能会发生不可预测的错误。如果你确保你的裸机程序不会进入某种模式,那么可以不设置该模式下的堆栈。

2.在系统下一般每个线程都有自己的堆栈,上下文切换过程中会重新设置堆栈,将即将要加载的进程上下文中的堆栈指针填入r13中。

3.在MMU启用后,CPU是看不到物理地址的,CPU所做的所有 *** 作都是针对虚拟地址。栈地址自然也就是虚拟地址了。

自己的理解

在/etc/profile 的最后面添加ulimit -s unlimited 保存,source /etc/profile使修改文件生效

linux查看修改线程默认栈空间大小 :ulimit -s

1、通过命令 ulimit -s 查看linux的默认栈空间大小,默认情况下 为10240 即10M

2、通过命令 ulimit -s 设置大小值 临时改变栈空间大小:ulimit -s 102400, 即修改为100M

3、可以在/etc/rc.local 内 加入 ulimit -s 102400 则可以开机就设置栈空间大小

4、在/etc/security/limits.conf 中也可以改变栈空间大小:

#<domain><type><item><value>

* soft stack 102400

重新登录,执行ulimit -s 即可看到改为102400 即100M


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8995277.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-23
下一篇 2023-04-23

发表评论

登录后才能评论

评论列表(0条)

保存