中建海峡建设发展有限公司网站wordpress调用友链

bicheng/2026/1/27 0:08:50/文章来源:
中建海峡建设发展有限公司网站,wordpress调用友链,百度指数分析大数据,长沙专业网站建设服务www.diybl.com 时间#xff1a;2009-04-12 作者:匿名 编辑:sky 初识Visual Leak Detector 灵活自由是C/C语言的一大特色#xff0c;而这也为C/C程序员出了一个难题。当程序越来越复杂时#xff0c;内存的管理也会变得越加复杂#xff0c;稍有不慎就会出现内存问 …www.diybl.com 时间2009-04-12 作者:匿名 编辑:sky      初识Visual Leak Detector        灵活自由是C/C语言的一大特色而这也为C/C程序员出了一个难题。当程序越来越复杂时内存的管理也会变得越加复杂稍有不慎就会出现内存问 题。内存泄漏是最常见的内存问题之一。内存泄漏如果不是很严重在短时间内对程序不会有太大的影响这也使得内存泄漏问题有很强的隐蔽性不容易被发现。 然而不管内存泄漏多么轻微当程序长时间运行时其破坏力是惊人的从性能下降到内存耗尽甚至会影响到其他程序的正常运行。另外内存问题的一个共同特点 是内存问题本身并不会有很明显的现象当有异常现象出现时已时过境迁其现场已非出现问题时的现场了这给调试内存问题带来了很大的难度。               Visual Leak Detector是一款用于Visual C的免费的内存泄露检测工具。可以在http://www.codeproject.com/tools/visualleakdetector.asp 下载到。相比较其它的内存泄露检测工具它在检测到内存泄漏的同时还具有如下特点 1、 可以得到内存泄漏点的调用堆栈如果可以的话还可以得到其所在文件及行号 2、 可以得到泄露内存的完整数据 3、 可以设置内存泄露报告的级别 4、 它是一个已经打包的lib使用时无须编译它的源代码。而对于使用者自己的代码也只需要做很小的改动 5、 他的源代码使用GNU许可发布并有详尽的文档及注释。对于想深入了解堆内存管理的读者是一个不错的选择。               可见从使用角度来讲Visual Leak Detector简单易用对于使用者自己的代码唯一的修改是#include Visual Leak Detector的头文件后正常运行自己的程序就可以发现内存问题。从研究的角度来讲如果深入Visual Leak Detector源代码可以学习到堆内存分配与释放的原理、内存泄漏检测的原理及内存操作的常用技巧等。        本文首先将介绍Visual Leak Detector的使用方法与步骤然后再和读者一起初步的研究Visual Leak Detector的源代码去了解Visual Leak Detector的工作原理。 使用Visual Leak Detector(1.0)        下面让我们来介绍如何使用这个小巧的工具。        首先从网站上下载zip包解压之后得到vld.h, vldapi.h, vld.lib, vldmt.lib, vldmtdll.lib, dbghelp.dll等文件。将.h文件拷贝到Visual C的默认include目录下将.lib文件拷贝到Visual C的默认lib目录下便安装完成了。因为版本问题如果使用windows 2000或者以前的版本需要将dbghelp.dll拷贝到你的程序的运行目录下或其他可以引用到的目录。        接下来需要将其加入到自己的代码中。方法很简单只要在包含入口函数的.cpp文件中包含vld.h就可以。如果这个cpp文件包含了stdafx.h则将包含vld.h的语句放在stdafx.h的包含语句之后否则放在最前面。如下是一个示例程序 #include vld.h void main() { … }        接下来让我们来演示如何使用Visual Leak Detector检测内存泄漏。下面是一个简单的程序用new分配了一个int大小的堆内存并没有释放。其申请的内存地址用printf输出到屏幕上。 #include vld.h #include stdlib.h #include stdio.h   void f() {     int *p new int(0x12345678);     printf(p%08x, , p); }   void main() {     f(); } 编译运行后在标准输出窗口得到 p003a89c0   在Visual C的Output窗口得到   WARNING: Visual Leak Detector detected memory leaks! ---------- Block 57 at 0x003A89C0: 4 bytes ---------- --57号块0x003A89C0地址泄漏了4个字节  Call Stack:                                               --下面是调用堆栈     d:/test/testvldconsole/testvldconsole/main.cpp (7): f --表示在main.cpp第7行的f()函数     d:/test/testvldconsole/testvldconsole/main.cpp (14): main –双击以引导至对应代码处     f:/rtm/vctools/crt_bld/self_x86/crt/src/crtexe.c (586): __tmainCRTStartup     f:/rtm/vctools/crt_bld/self_x86/crt/src/crtexe.c (403): mainCRTStartup     0x7C816D4F (File and line number not available): RegisterWaitForInputIdle  Data:                                   --这是泄漏内存的内容0x12345678     78 56 34 12                                                  xV4..... ........   Visual Leak Detector detected 1 memory leak.    第二行表示57号块有4字节的内存泄漏地址为0x003A89C0根据程序控制台的输出可以知道该地址为指针p。程序的第7行f()函数里在该地址处分配了4字节的堆内存空间并赋值为0x12345678这样在报告中我们看到了这4字节同样的内容。 可以看出对于每一个内存泄漏这个报告列出了它的泄漏点、长度、分配该内存时的调用堆栈、和泄露内存的内容分别以16进制和文本格式列出。双击该堆栈报告的某一行会自动在代码编辑器中跳到其所指文件的对应行。这些信息对于我们查找内存泄露将有很大的帮助。 这 是一个很方便易用的工具安装后每次使用时仅仅需要将它头文件包含进来重新build就可以。而且该工具仅在build Debug版的时候会连接到你的程序中如果build Release版该工具不会对你的程序产生任何性能等方面影响。所以尽可以将其头文件一直包含在你的源代码中。 Visual Leak Detector工作原理        下面让我们来看一下该工具的工作原理。        在这之前我们先来看一下Visual C内置的内存泄漏检测工具是如何工作的。Visual C内置的工具CRT Debug Heap工作原来很简单。在使用Debug版的malloc分配内存时malloc会在内存块的头中记录分配该内存的文件名及行号。当程序退出时CRT 会在main()函数返回之后做一些清理工作这个时候来检查调试堆内存如果仍然有内存没有被释放则一定是存在内存泄漏。从这些没有被释放的内存块的 头中就可以获得文件名及行号。        这种静态的方法可以检测出内存泄漏及其泄漏点的文件名和行号但是并不知道泄漏究竟是如何发生的并不知道该内存分配语句是如何被执行到的。要想了解这 些就必须要对程序的内存分配过程进行动态跟踪。Visual Leak Detector就是这样做的。它在每次内存分配时将其上下文记录下来当程序退出时对于检测到的内存泄漏查找其记录下来的上下文信息并将其转换成 报告输出。        初始化        Visual Leak Detector要记录每一次的内存分配而它是如何监视内存分配的呢Windows提供了分配钩子(allocation hooks)来监视调试堆内存的分配。它是一个用户定义的回调函数在每次从调试堆分配内存之前被调用。在初始化时Visual Leak Detector使用_CrtSetAllocHook注册这个钩子函数这样就可以监视从此之后所有的堆内存分配了。        如何保证在Visual Leak Detector初始化之前没有堆内存分配呢全局变量是在程序启动时就初始化的如果将Visual Leak Detector作为一个全局变量就可以随程序一起启动。但是C/C并没有约定全局变量之间的初始化顺序如果其它全局变量的构造函数中有堆内存分 配则可能无法检测到。Visual Leak Detector使用了C/C提供的#pragma init_seg来在某种程度上减少其它全局变量在其之前初始化的概率。根据#pragma init_seg的定义全局变量的初始化分三个阶段首先是compiler段一般c语言的运行时库在这个时候初始化然后是lib段一般用于第三 方的类库的初始化等最后是user段大部分的初始化都在这个阶段进行。Visual Leak Detector将其初始化设置在compiler段从而使得它在绝大多数全局变量和几乎所有的用户定义的全局变量之前初始化。   记录内存分配        一个分配钩子函数需要具有如下的形式 int YourAllocHook( int allocType, void *userData, size_t size, int blockType, long requestNumber, const unsigned char *filename, int lineNumber);        就像前面说的它在Visual Leak Detector初始化时被注册每次从调试堆分配内存之前被调用。这个函数需要处理的事情是记录下此时的调用堆栈和此次堆内存分配的唯一标识——requestNumber。        得到当前的堆栈的二进制表示并不是一件很复杂的事情但是因为不同体系结构、不同编译器、不同的函数调用约定所产生的堆栈内容略有不同要解释堆栈并得到 整个函数调用过程略显复杂。不过windows提供一个StackWalk64函数可以获得堆栈的内容。StackWalk64的声明如下 BOOL StackWalk64(  DWORD MachineType,  HANDLE hProcess,  HANDLE hThread,  LPSTACKFRAME64 StackFrame,  PVOID ContextRecord,  PREAD_PROCESS_MEMORY_ROUTINE64 ReadMemoryRoutine,  PFUNCTION_TABLE_ACCESS_ROUTINE64 FunctionTableAccessRoutine,  PGET_MODULE_BASE_ROUTINE64 GetModuleBaseRoutine,  PTRANSLATE_ADDRESS_ROUTINE64 TranslateAddress ); STACKFRAME64结构表示了堆栈中的一个frame。给出初始的STACKFRAME64反复调用该函数便可以得到内存分配点的调用堆栈了。     // Walk the stack.     while (count _VLD_maxtraceframes) {         count;         if (!pStackWalk64(architecture, m_process, m_thread, frame, context,                           NULL, pSymFunctionTableAccess64, pSymGetModuleBase64, NULL)) {             // Couldnt trace back through any more frames.             break;         }         if (frame.AddrFrame.Offset 0) {             // End of stack.             break;         }  转载于:https://www.cnblogs.com/secbook/archive/2009/10/29/2655440.html

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

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

相关文章

在线网站seo优化上海网站seo排名

核心考点:1.栈的应用 2.字符串处理 题目描述 所谓后缀表达式是指这样的一个表达式:式中不再引用括号,运算符号放在两个运算对象之后,所有计算按运算符号出现的顺序,严格地由左而右新进行(不用考虑运算符的…

打车小程序源码京东网站优化

转载自 超详细的 Redis Cluster 官方集群搭建指南 今天从 0 开始搭建 Redis Cluster 官方集群,解决搭建过程中遇到的问题,超详细。 安装ruby环境 因为官方提供的创建集群的工具是用ruby写的,需要ruby2.2.2版本支持,ruby安装需…

wordpress使用腾讯云存储广州制作网站seo

说明:该系列文章从本人知乎账号迁入,主要原因是知乎图片附件过于模糊。 知乎专栏地址: 语音生成专栏 系列文章地址: 【GPT-SOVITS-01】源码梳理 【GPT-SOVITS-02】GPT模块解析 【GPT-SOVITS-03】SOVITS 模块-生成模型解析 【G…

网站建设制作设计seo优化湖北wordpress模板优化

组合选择框QComboBox类的基本用法 组合选择框QComboBox类的基本用法前言正文1、创建组合选择框2、组合选择框添加多个选项3、组合选择框清空选项4、组合选择框添加单个选项5、组合选择框清除选项6、组合选择框获取当前选项文本7、组合选择框获取当前选项索引8、组合选择框信号:…

网站 备案 注销厦门网站关键词优化

本文主要面向UMG以及Common UI的初学者 文章目录 效果展示概要Activate和Deactivate可见性绑定UI动画设置Common Activatable Widget的默认焦点 效果展示 概要 这个例子非常简单,定义了13个Common Activatable Widget CommonUI_ActivatableWidgets相当于一个容器包…

苏州市住房和建设局网站wordpress点击图片直接相册浏览

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 // 为了装 vue 的 webpack ,我把整个服务器重置了。docker 也没有了,只好重新装 docker ... 1. 准备工作 yum …

网站到底是域名需要备案还是空间金坛做网站的

非常重要 依赖属性和附加属性,两者是有关系的,也是有些区别的,很多时候,可能会把两者混淆了。 附加属性(Attach Property) 顾名思义,就是附加上面的属性,自身是没有的,…

佛山专业的免费建站哈尔滨最新出入规定

代码随想录二刷 |二叉树 | 二叉树的层序遍历 题目描述解题思路代码实现 题目描述 102.二叉树的层序遍历 给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。 示例…

自适应网站怎么做移动配置织梦网站地图在线生成

🎥 屿小夏 : 个人主页 🔥个人专栏 : C语言详解 🌄 莫道桑榆晚,为霞尚满天! 文章目录 📑前言一、while循环1.1语法1.2 执行过程解析1.3 break1.4 continue 🌤️全篇总结 &…

陕西网站建设企业手机改ip地址软件免费

leetcode 746 使用最小花费爬楼梯 虽然是简单题但还是要说一下,感觉做题的思路还是不够清晰,好的是知道状态是最低花费,知道围绕所求的目标进行展开,倒推出递推公式 一开始写的递推公式是dp[i]dp[i-1]min(cost[i-2],cost[i-1]),写出了一个类似贪心算法的东西,归根结底还是对dp…

网站建设 销售人员渝发建设官方网站

5.1 概述 只有一个抽象方法的接口我们称之为函数接口。 JDK的函数式接口都加上了 FunctionalInterface 注解进行标识。但是无论是否加上该注解只要接口中只有一个抽象方法,都是函数式接口。 在Java中,抽象方法是一种没有方法体(实现代码&a…

工程设计东莞网站建设技术支持住房和城乡建设部网站诚信评价

实验理论依据: \0、NULL、0和0在C语言中表示的意义是不同的: \0:这是一个空字符,ASCII值为0。常用于字符串结束的标志。 NULL:这是一个宏,表示空指针,用于初始化指针变量。 0:这是数字0&#…

假网站连接怎么做的深圳vi设计公司 全力设计

身份证信息批量识别OCR是一项解决方案,它能够将身份证照片打包成zip格式或通过URL地址进行提交,并能够识别照片中的文本信息。最终,用户可以将识别结果生成为excel文件进行下载。 API接口功能: 1. 批量识别:支持将多…

穷游 网站开发搭建网站一般多少钱

2009 结束,2010 年的 Web 会是什么样,或者说,未来的 Internet 意味着什么,2010 会是值得关注的一年。本文从 5 个方面展望 2010 年的 Web,包括 HTML5,CSS3,字体服务技术;浏览器&…

360安全网站怎么做号码认证推广模式怎么写

层序遍历、回溯、由两种遍历序列逆推二叉树 513.找树左下角的值 思路: 使用层序遍历,只需要记录最后一行第一个节点的数值就可以了。 特殊情况: 代码实现 class Solution { public:int findBottomLeftValue(TreeNode* root) {int val;//利用…

网络推广网站套餐公司网址要收费吗

将csv或者txt格式的文件导入SQLite一般有两种方式:使用pandas.readcsv()读取后,用to_sql方法写入数据库使用SQLiteStudio创建表格,再导入数据但是这两种方法在数据量比较大的时候会非常慢,这里提供一种使用官网提供的SQLite.exe命…

算命公司网站建设制作开发方案网络推广营销方式

本文将为开发者们提供一个详细的指南,教你如何将一对一直播美颜SDK集成到你的应用中,以提供更具吸引力的直播体验。 -为什么选择一对一直播美颜SDK? 在开始之前,让我们先明确一下为什么选择一对一直播美颜SDK是一个明智的决定。…

做问卷调查赚钱的网站好便宜网站制作公司

atitit.Sealink2000国际海运信息管理系统 操作手冊 文件夹 第一章 使用说明 第一节 系统登录 双击桌面的系统运行程序图标。进入选择数据库的对话框,如图1-1所看到的。选择对应的数据库后,点击【OK】button或在所选数据库上双击。进入登录身份…

西安网站建设那家伙网站建设目标及需求分析

用户需求:Android在系统文件夹找到一个文件想发送自己开发的app进行处理该怎么办? 这时候可以采用两个Activity,一个Activity用作Launcher,一个用于处理发送的文件;具体Activity intent-filter该怎么写了?可以参考下面的代码: <intent-filter><action androi…

帮人家做网站怎么赚钱静态网页设计实训报告

作为电子行业的“风向标”&#xff0c;CES 2024&#xff08;国际消费电子展&#xff09;于1月9日至12日在美国拉斯维加斯举办。本届展会可谓是AI的盛宴&#xff0c;芯片、AI PC、智能家居、汽车科技、消费电子等领域与AI相关的前沿成果接连发布&#xff0c;引领人工智能领域的科…