当前位置: 首页 > wzjs >正文

国外做问卷赚购物券等的网站百度网站优化排名

国外做问卷赚购物券等的网站,百度网站优化排名,做网站团队,网站建站工具有哪些0 概括 本文用于记录 x86-Linux 应用程序发生持续性内存泄漏问题时的定位方法。主要介绍valgrind工具的应用。 1 原理 对于内存泄漏问题的定位,一种朴素的想法就是对内存申请点进行监控。对于一个内存申请调用点(例如c/c中的malloc函数)&a…

0 概括

本文用于记录 x86-Linux 应用程序发生持续性内存泄漏问题时的定位方法。主要介绍valgrind工具的应用。

1 原理

对于内存泄漏问题的定位,一种朴素的想法就是对内存申请点进行监控。对于一个内存申请调用点(例如c/c++中的malloc函数),记录下该调用点被触发时的调用栈 c a l l s t a c k callstack callstack,以及申请到的内存 m e m o r y memory memory。同一个调用栈可能申请多次内存,我们把申请到的内存都记录下来,于是我们得到了一个统计表,表中元素长这样: ( c a l l s t a c k i , { m e m o r y i 1 , m e m o r y i 2 , . . . } ) (callstack_i,\{memory_{i}^{1},memory_{i}^{2},...\}) (callstacki,{memoryi1,memoryi2,...})。当 m e m o r y i j memory_{i}^{j} memoryij内存被释放(例如c/c++中的free函数),则把统计表中的 m e m o r y i j memory_{i}^{j} memoryij项删除即可。如此一来,当程序结束,依旧持有 m e m o r y memory memory的那些 c a l l s t a c k callstack callstack就可以认为是潜在的内存泄漏点。

上述的朴素想法,ASAN工具已经帮我们实现。本文讨论更特殊的场景,对ASAN工具的使用不再赘述。在程序持续运行,持续内存泄漏的场景中,我们需要对上述朴素想法做一点点改变。在 t i m e s t a m p timestamp timestamp时刻,我们记录一下该时刻的统计表 ( c a l l s t a c k i , { m e m o r y i 1 , m e m o r y i 2 , . . . } ) (callstack_i,\{memory_{i}^{1},memory_{i}^{2},...\}) (callstacki,{memoryi1,memoryi2,...})。随程序的运行,我们便得到了一张随时间变化的统计表 [ t i m e s t a m p , { ( c a l l s t a c k i , { m e m o r y i 1 , m e m o r y i 2 , . . . } } ) ] [timestamp, \{(callstack_i,\{memory_{i}^{1},memory_{i}^{2},...\}\})] [timestamp,{(callstacki,{memoryi1,memoryi2,...}})]。某一时刻的统计表我们称之为一个内存切片。如此一来,当我们观测到一个 c a l l s t a c k i callstack_i callstacki的内存持有量随时间不断增加,则可以识别该点为潜在的内存泄漏点。这种内存切片的想法,valgrind工具已经帮我们实现。

2 valgrind工具的使用

本文不详细介绍valgrind工具,只通过简单案例介绍如何使用valgrind工具形成内存切片图。

x86-Linux服务器环境,先执行以下命令安装valgrind工具。

sudo apt install valgrind
sudo apt install massif-visualizer

再给出一个持续运行持续内存泄漏的简单范例main.cpp。

#include <thread>
#include <chrono>
#include <vector>
#include <string>void sleepMs(int milliseconds) {std::this_thread::sleep_for(std::chrono::milliseconds(milliseconds));
}int main(int /*argc*/, char** /*argv*/) {std::vecotr<std::string> vec;while(true) {// 新增10个数据for (size_t i = 0; i < 10U; i++) {vec.push_back(std::string(1000000, 'A'));sleepMs(100);}// 释放9个数据for (size_t j = 0; j < 9U; j++) {vec.pop_back();sleepMs(100);}}return 0;
}    

对应的编译命令为g++ -g -o exe main.cpp
在这里插入图片描述

接下来使用valgrind运行这个程序,生成内存切片。对应的命令为

valgrind --tool=massif --time-unit=B ./exe

运行一段时间后,ctrl+c结束程序,就生成了对应的内存切片文件massif.out.<pid>。使用可视化工具打开这个内存切片文件,效果如下。
在这里插入图片描述
可以看到调用点持有的内存量随时间的变化,还可以看到不同时刻,各调用栈持有的内存量。至此可以协助我们分析持续性的内存泄漏。

3 结论

本文记录持续内存泄漏问题的一种定位方法,记录valgrind工具的使用。但是valgrind工具会极大影响程序性能。对商用程序,如果设计得不好,性能受影响的情况下有可能功能都不正常。所以本文方法只是一种参考,具体情况还需要具体分析。

http://www.dtcms.com/wzjs/489719.html

相关文章:

  • git做网站根目录夫唯seo怎么样
  • 九龙坡网站建设哪家好营销软件网
  • 营销网站建设专业团队在线服务专业做网站公司
  • 网站建设找哪家好百度正版下载恢复百度
  • 网站制作上哪学校新乡百度网站优化排名
  • 做网站的基本功能成人教育培训机构
  • 做网站开发的想接私活360站长工具
  • 微信上浏览自己做的网站吗站长之家统计
  • wordpress建立非博客郑州seo学校
  • 罗湖网站制作费用google登录
  • 灯饰模板网站2023年6月份又封城了
  • 郑州高端定制建设网站百度网盘电脑版
  • 中国十大传媒公司排名班级优化大师头像
  • 网站排名优化师百度认证考试
  • 建站方案书备案网络营销
  • 如今做那些网站能致富百度平台商家订单查询
  • 网站空间购买流程百度联盟推广
  • 电商加盟网站建设百度知道
  • 2022最新通道地址1全面的seo网站优化排名
  • 重庆做网站公司有哪些5118数据分析平台官网
  • 成都网站建设外包公司排名班级优化大师官方免费下载
  • 社交网站图片展示太原seo外包公司
  • c2c电子商务网站有哪些营销手段和营销方式
  • 自建站成本广告网站大全
  • 做企业网站需要什么资料百度搜索引擎的特点
  • 在线网站制作系统源码百度网址大全免费下载
  • 网站怎样做移动端百度知道灰色词代发收录
  • 大连建设网站便民服务爱站网综合查询
  • 深圳龙岗做网站深圳网站建设公司
  • 网站开发合同存在的缺陷磁力猫最佳搜索引擎入口