• ARM学习(10) 运行占据内存统计


    笔者在群里看到有一个人问问题,说是要统计算法所占的内存数据。

    开局先来张几张图吧,显示一下对话内容 看看大家的理解。
    暂且命名问题是 小明提出,回答者有A、B、C

    以上就是本篇文章的全部内容,让我们下次再讨论。
    。。。。。。

    • 小明说:想要计算 一段算法在所占用的内存

    • A(笔者):

      • 建议看map文件,map文件可以看到data 段 的一些占用size,以armcc 为例,以.o为单位,统一一个.o文件中的data段的size。
      • 所以我建议他放在一个文件,可以看到这个算法中.o文件的data段的大小,即就是全局变量以及静态变量所占用的size。
      • 如果有malloc的话,会另算。
      • 栈空间这块的,我没有考虑,栈是循环利用的,不是光算法占用,但是实际也应该考虑,如果栈消耗太大,则也会存在问题。
    • B:认为:

      • 全局所需内存=全局变量(静态内存部分)+ 局部变量(动态栈内存部分)+malloc(动态堆内存部分),
      • map只能统计静态部分,不能统计动态部分,因为map是编译静态产生的,
      • 动态内存分为栈和堆,栈体现在动态变化的,
      • 静态变量在栈里面看不到,
    • C:认为:

      • 局部变量是静态内存,编译时确定,map里面局部变量的地址是相对于函数的偏移。
      • 函数大小包括局部变量大小
      • 动态内存只有堆,没有栈,如果局部变量很大,则会看到函数的体积变大
      • 编译出可执行程序后,栈空间就不会增大了。
      • 递归多次,只会增大函数的体积,不会栈超,栈超了,链接器会报错。
      • map文件可以看出栈小,导致栈溢出的问题。

    笔者来说说看法,经过试验得出的结果,

  • 相关阅读:
    怎么解决 Http 协议无状态?
    L72.linux命令每日一练 -- 第十章 Linux网络管理命令 -- mail和nslookup
    vue3 自定义Hooks
    AI硬件:显卡 vs. 处理器 vs. 量子计算机
    【opencv-c++】opencv_contrib下载使用
    java中如何将嵌套循环性能提高500倍
    坐公交:内外向乘客依序选座(python字典、字符串、元组)
    数据结构--6.5二叉排序树(插入,查找和删除)
    Oracle 12c Docker镜像配置SSL
    频控阵(FDA)信号检测
  • 原文地址:https://blog.csdn.net/qq_34430371/article/details/125903384