一个简单的测试Linux进程栈空间大小的方法
本文最后更新于:2022年6月8日 晚上
一个简单的测试linux进程栈空间大小的方法
背景
在ubuntu中,可以通过命令ulimit -a
查看所有的限制信息(ulimit -s
直接显示stack size)
但在某些嵌入式开发板中,通过此命令查看到的stack size
显示ulimited
(无限制,假),但实际中是有限制的,不知道stack size
不利于大型项目的开发(栈空间使用过多后程序会直接挂 segmentation fault)。所以,得到一个真实的stack size
尤为重要。
思路
A函数每次创建 1024bytes 数据;使用全局变量存储A函数调用次数,每次调用A函数+1;
主函数中递归调用A函数,由于主函数中栈空间相对于子线程会大一些,所以在子线程中递归调用。最终栈溢出后通过屏幕打印的计数即可得到大概的stack size。忽略掉函数调用栈空间占用。
另一种思路:通过汇编得到esp指针获得起始位置,结束位置通过递归调用栈溢出后gdb打印esp指针获得结束位置。详见https://blog.csdn.net/yangkuanqaz85988/article/details/52403726
实现
1 |
|
1 |
|
大概是7937 * 1024 bytes = 7937kbytes ≈ 8 Mbytes 。
一个简单的测试Linux进程栈空间大小的方法
https://www.glj0.top/posts/f2b20ab4/