Advertisement

栈使用量的检测方法

阅读量:

我又有想法辣,<( ̄︶ ̄)>,今天的想法的目的是实现栈的使用量的检测方法。

1、利用*.map文件定位栈顶地址,并且得到栈的使用量大小;

2、定义一个全局变量用于存储栈内的内存,并将默认值设为栈顶内存位置;

在主循环过程中,在当前堆顶位置出发对内存块内的数据进行对比分析:若发现两者的数值不一致,则记录下当前堆顶位置的地址信息;随后计算当前堆顶位置与堆底位置之间的差额,并将此差额与当前已使用的内存容量相比(即除以),最终得出堆使用的比例指标。

4、在第三步中获得初始内存值后,在下次检测时应从该内存地址开始进行检查,并继续后续步骤。也就是说,在此之后再次遇到同一内存地址时不再进行重复检查。因此本方案无法精确获取程序运行时栈空间的实际占用情况

详细说明第四步的原因:那么,在这种检测方法中为什么不能每次都从栈顶开始呢?这样一来,则无法准确反映当前栈的实际占用情况。需要注意的是,在大多数编译器环境下(除非特别配置),当执行出栈操作时并不会清除堆叠空间。因此,在这种情况下所得出的结果可能会受到之前多次操作的影响。

伪代码如下:

#define STACK_TOP 0x20000210 //被设置为栈顶地址的位置,在编译时可能会变化吗?如果有宏定义中的常量名称存在变量特性,则需特别注意

#define STK_USE 0x50512345//栈使用的规模定义为STK_USE变

全部评论 (0)

还没有任何评论哟~