一种简单通用的获取函数栈空间大小的方法 您所在的位置:网站首页 汇编题目怎么计算栈空间大小 一种简单通用的获取函数栈空间大小的方法

一种简单通用的获取函数栈空间大小的方法

2024-07-12 19:20| 来源: 网络整理| 查看: 265

有些时候我们需要评估某个函数所使用的栈空间大小,比如创建线程的时候,我们需要估算该线程函数所需的栈空间,分配合适的线程栈。

本文介绍一种简单的方法,来获取某个函数所占用的栈空间大小。

原理:

针对递减栈内存模型,调用函数时,栈指针会往下移动,移动的距离取决于该函数的局部变量和调用子函数,也就是该函数所使用的栈空间,在函数返回时,栈指针又会恢复到调用前的位置。

根据这一特性,我们可以在调用函数前把栈底部的内存用一个特定值来填充,调用结束后检查栈底部的值是否发生变化,搜索到最后1个发生变化的地址就是该函数所使用的栈底。用当前栈指针减去栈底指针就能算出该函数实际使用的栈空间大小。

实施:

废话不多说,直接上测试代码:

//用0xAA填充栈底512字节 void stack_test_begin(void) { register int i; unsigned char mem[512]; for(i = 0; i < 512; i++) { mem[i] = 0xAA; } } //检查栈底,返回栈大小 int stack_test_end(void) { register int i; unsigned char mem[512]; for(i = 0; i < 512; i++) { if(mem[i] != 0xAA) { return 512 - i; } } return 0; } //被测试函数, 此函数理论占用栈空间为128字节 void stack_use_128(void) { register int i; char mem[128]; for(i=0; i


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有