讲师中心 微信公众号
AI工具推荐 视频效率加速

c++怎么在Linux下使用perf工具进行性能分析_c++程序热点分析与系统级优化

小婷小哥_6903

小婷小哥_6903

发布时间:2025-11-21 12:13:33

|

311人浏览过

|

来源于php中文网

原创

编译时需添加-g -ggdb -fno-omit-frame-pointer以保留调试和调用栈信息,配合-Og或-O2优化;使用perf top实时监控CPU热点函数;通过perf record记录采样数据,再用perf report分析详情,并结合FlameGraph生成火焰图直观定位性能瓶颈。

c++怎么在linux下使用perf工具进行性能分析_c++程序热点分析与系统级优化

在Linux下用perf分析C++程序性能,核心是获取函数级的耗时数据。关键是编译时保留调试信息,并用正确的命令组合找出消耗CPU最多的函数。

编译程序以支持性能分析

要让perf能精确到函数名甚至代码行,编译时必须包含完整的调试符号和调用栈信息。直接用默认的-O2或-O3优化级别可能会导致函数内联,影响分析结果。

  • -g -ggdb: 生成GDB兼容的调试信息,这是perf关联地址与函数名的基础
  • -fno-omit-frame-pointer: 保留帧指针,这对perf构建准确的调用栈(-g参数)至关重要
  • -Og 或 -O2: 使用适中的优化级别。-Og表示“优化调试体验”,既能保证一定的性能,又不会过度破坏代码结构;-O2是生产环境常用级别,但可能增加分析难度

示例编译命令:
g++ -O2 -g -ggdb -fno-omit-frame-pointer -o my_program my_program.cpp

使用perf top进行实时热点监控

当你需要快速查看正在运行的程序中哪个函数最耗CPU时,perf top是最直接的工具。它像top命令一样动态刷新,但显示的是函数级别的开销。

立即学习“C++免费学习笔记(深入)”;

基本操作流程:
1. 启动你的C++程序并获取其进程ID (PID)。
2. 在另一个终端执行:
sudo perf top -p <PID> -g

重点关注输出中的三列:
- Overhead: 该函数占用CPU时间的百分比,数值越大说明越可能是瓶颈。
- Shared Object: 函数所在的二进制文件,[.]代表用户态程序,[k]代表内核。
- Symbol: 具体的函数名。

C++14 标准参考
C++14 标准参考

C++14 标准最终草案参考资料,适合旧项目兼容、语言特性对照、标准库行为核对和现代 C++ 迁移学习。

下载

按键盘a可以对当前选中的函数进行汇编级注解,查看哪一行汇编指令最耗时。

使用perf record进行详细分析和火焰图生成

perf top的数据无法保存,而perf record可以将采样数据记录到文件,便于后续深入分析和生成可视化报告。

步骤一:记录性能数据
运行你的程序并开始记录:
perf record -g -o perf.data ./my_program
或者附加到一个已运行的进程:
perf record -g -p <PID>
完成后按Ctrl+C停止。数据会保存在perf.data文件中。

步骤二:生成分析报告
使用perf report读取数据文件:
perf report -i perf.data
这会进入一个交互式界面,展示所有函数的调用关系和耗时占比,比perf top更全面。

步骤三:生成火焰图(推荐)
火焰图是性能分析的最佳实践,能直观地展示调用栈和热点函数。你需要先安装FlameGraph工具:
git clone https://github.com/brendangregg/FlameGraph.git
然后生成SVG图像:
perf script | FlameGraph/stackcollapse-perf.pl | FlameGraph/flamegraph.pl > flamegraph.svg
用浏览器打开flamegraph.svg,最宽的框就是性能热点。

基本上就这些。从编译、实时监控到离线深度分析,这套方法能帮你准确定位C++程序的性能问题。

相关文章

数码产品性能查询
数码产品性能查询

该软件包括了市面上所有手机CPU,手机跑分情况,电脑CPU,电脑产品信息等等,方便需要大家查阅数码产品最新情况,了解产品特性,能够进行对比选择最具性价比的商品。

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

相关专题

更多
C++ 智能指针与现代内存管理
C++ 智能指针与现代内存管理

深入讲解 C++ 现代内存管理的核心工具——智能指针,涵盖 unique_ptr 独占所有权语义、shared_ptr 引用计数机制与循环引用问题、weak_ptr 弱引用的应用场景、make_unique/make_shared 工厂函数的性能优势、自定义删除器的编写、RAII 资源管理思想的实践,以及从裸指针迁移到智能指针的重构策略,帮助开发者编写安全无泄漏的现代 C++ 代码。

339

2026.04.23

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

5307

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

2348

2023.08.10

github中文官网入口 github中文版官网网页进入
github中文官网入口 github中文版官网网页进入

github中文官网入口https://docs.github.com/zh/get-started,GitHub 是一种基于云的平台,可在其中存储、共享并与他人一起编写代码。 通过将代码存储在GitHub 上的“存储库”中,你可以: “展示或共享”你的工作。 持续“跟踪和管理”对代码的更改。

8425

2026.01.21

GitHub官网入口版本汇总
GitHub官网入口版本汇总

本专题整合了GitHub入口版本地址汇总,阅读专题下面的文章了解更多详细内容。

838

2026.04.02

自建git服务器
自建git服务器

git服务器是目前流行的分布式版本控制系统之一,可以让多人协同开发同一个项目。本专题为大家提供自建git服务器相关的各种文章、以及下载和课程。

5839

2023.07.05

git和svn的区别
git和svn的区别

git和svn的区别:1、定义不同;2、模型类型不同;3、存储单元不同;4、是否拥有全局版本号;5、内容完整性不同;6、版本库不同;7、克隆目录速度不同;8、分支不同。php中文网为大家带来了git和svn的相关知识、以及相关文章等内容。

1720

2023.07.06

git撤销提交的commit
git撤销提交的commit

Git是一个强大的版本控制系统,它提供了很多功能帮助开发人员有效地管理和控制代码的变更,本专题为大家提供git 撤销提交的commit相关的各种文章内容,供大家免费下载体验。

1014

2023.07.24

C++运算符基础入门
C++运算符基础入门

本专题详细讲解了C++运算符的类型、语法与使用方法,涵盖算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符、条件运算符及其他特殊运算符,并通过代码示例解析优先级与结合性。

0

2026.10.09

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Buffalo框架快速入门指南
Buffalo框架快速入门指南

共0课时 | 0人学习

Valgrind支持平台说明
Valgrind支持平台说明

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn