应用中调用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
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)