随笔分类 -  debug/memory/optimize

摘要:不光还是游戏引擎,任何一个项目都有必要做好内存管理,至少可以监控内存使用量和内存泄露。而对于游戏引擎而言更是如此,在游戏引擎里面动态分配释放内存的地方不在少数,做好内存管理对于提高引擎运行效率是十分必要的。内存管理就是做两件事,负责内存的分配和释放,再有就是对内存的分配释放进行监控,据此来解决内存泄露和掌握内存使用情况。先说说内存分配释放,这也是内存管理最重要的部分。一般来说内存管理只管理小内存的分配释放,大内存则无需管理制作监控即可。过多的小内存分配释放会造成系统内存碎片从而可能分配不下内存,与此同时过多的调用系统的内存分配释放函数也是低效。malloc,free这些函数本身就很慢。现在问题 阅读全文
posted @ 2011-02-11 09:00 oayx 阅读(348) 评论(0) 推荐(0) 编辑
摘要:如 前所述,读者已经了解到"堆"和"栈"的区别。而在编程实践中,不可避免地要大量用到堆上的内存。例如在程序中维护一个链表的数据结构时,每次新增或者删 除一个链表的节点,都需要从内存堆上分配或者释放一定的内存;在维护一个动态数组时,如果动态数组的大小不能满足程序需要时,也要在内存堆上分配新的内存 空间。6.1.1 默认内存管理函数的不足利用默认的内存管理函数new/delete或malloc/free在堆上分配和释放内存会有一些额外的开销。系 统在接收到分配一定大小内存的请求时,首先查找内部维护的内存空闲块表,并且需要根据一定的算法(例如分配最先找到的不小于申请大小的内存块给请求者,或 者分配最 阅读全文
posted @ 2011-02-05 10:48 oayx 阅读(749) 评论(1) 推荐(2) 编辑
摘要:http://hi.baidu.com/%C0%EE%B6%AB%CF%FE/blog/item/0f1983a170a08989471064aa.html内存管理是C++程序员的痛。我的《内存管理变革》系列就是试图讨论更为有效的内存管理方式,以杜绝(或减少)内存泄漏,减轻C++程序员的负担。由于工作忙的缘故,这个系列目前未完,暂停。这篇短文我想换个方式,讨论一下如何以最快的速度找到内存泄漏。确认是否存在内存泄漏我们知道,MFC程序如果检测到存在内存泄漏,退出程序的时候会在调试窗口提醒内存泄漏。例如:class CMyApp : public CWinApp{public: BOOL Init 阅读全文
posted @ 2011-01-31 15:33 oayx 阅读(322) 评论(0) 推荐(0) 编辑
摘要:1.初识Visual Leak Detector灵活自由是C/C++语言的一大特色,而这也为C/C++程序员出了一个难题。当程序越来越复杂时,内存的管理也会变得越加复杂,稍有不慎就会出现内存问题。内存泄漏是最常见的内存问题之一。内存泄漏如果不是很严重,在短时间内对程序不会有太大的影响,这也使得内存泄漏问题有很强的隐蔽性,不容易被发现。然而不管内存泄漏多么轻微,当程序长时间运行时,其破坏力是惊人的,... 阅读全文
posted @ 2010-12-04 16:17 oayx 阅读(1566) 评论(0) 推荐(1) 编辑
摘要:Visual C++内置内存泄露检测工具,但是功能十分有限。VLD就相当强大,可以定位文件、行号,可以非常准确地找到内存泄漏的位置,而且还免费、开源!在使用的时候只要将VLD的头文件和lib文件放在工程文件中即可。也可以一次设置,新工程就不用重新设置了。只介绍在Visual Studio 2003/2005中的设置方法,VC++ 6.0类似:打开Tools -> Options -> ... 阅读全文
posted @ 2010-12-04 16:16 oayx 阅读(11020) 评论(0) 推荐(1) 编辑
摘要:原文链接:http://blog.csdn.net/060/archive/2006/10/08/1326025.aspxC++ 内存池l 下载示例工程 – 105Kbl 下载源代码 – 17.3Kb目录l 引言l 它怎样工作l 示例l 使用这些代码l 好处l 关于代码l ToDol 历史引言C/C++的内存分配(通过malloc或new)可能需要花费很多时。更糟糕的是,随... 阅读全文
posted @ 2010-12-04 16:07 oayx 阅读(1030) 评论(0) 推荐(0) 编辑
摘要:SMemoryChunk.h#ifndef__SMEMORYCHUNK_H__#define__SMEMORYCHUNK_H__typedefunsignedcharTByte;structSMemoryChunk{TByte*Data;//数据std::size_tDataSize;//该内存块的总大小std::size_tUsedSize;//实际使用的大小boolIsAllocationCh... 阅读全文
posted @ 2010-12-04 16:03 oayx 阅读(645) 评论(0) 推荐(0) 编辑
摘要:认识一下new和delete的开销:new和delete首先会转调用到malloc和free,这个大家应该很熟识了。很多人认为malloc是一个很简单的操作,其实巨复杂,它会执行一个系统调用(当然不是每一次,windows上是按页算),该系统调用会锁住内存硬件,然后通过链表的方式查找空闲内存,如果找到大小合适的,就把用户的进程地址映射到内存硬件地址中,然后释放锁,返回给进程。如果在多线程环境下,进... 阅读全文
posted @ 2010-12-04 15:59 oayx 阅读(3447) 评论(0) 推荐(0) 编辑
摘要:转载时请注明出处和作者联系方式:http://blog.csdn.net/absurd作者联系方式:李先静 <xianjimli at hotmail dot com>更新时间:2007-7-9作为一个C程序员,每天都在和malloc/free/calloc/realloc系列函数打交道。也许和它们混得太熟了,反而忽略了它们的存在,甚至有了三五年的交情,仍然对它们的实现一无所知。相反,... 阅读全文
posted @ 2010-12-04 15:51 oayx 阅读(455) 评论(0) 推荐(0) 编辑
摘要:内存整理的原理 整理自CSDN拓荒时代国内的程序员大多是在 Java 语言中第一次感受到垃圾收集技术的巨大魅力的,许多人也因此把 Java 和垃圾收集看成了密不可分的整体。但事实上,垃圾收集技术早在 Java 语言问世前 30 多年就已经发展和成熟起来了, Java 语言所做的不过是把这项神奇的技术带到了广大程序员身边而已。 如果一定要为垃圾收集技术找一个孪生兄弟,那么, Lisp 语言才是当之无... 阅读全文
posted @ 2010-12-04 15:48 oayx 阅读(694) 评论(0) 推荐(0) 编辑
摘要:1 安装时使用默认路径,修改的话会导致不能log2 被测试程序最好是中文路径,否则LDGrapher.exe打开会出错 阅读全文
posted @ 2010-12-04 15:21 oayx 阅读(499) 评论(0) 推荐(0) 编辑
摘要:LeakDiag是微软一款检测memory leak的工具,使用比较简单首先去下载一个http://www.cnblogs.com/lsmdiao0812/admin/ftp://ftp.microsoft.com/PSS/Tools/Developer%20Support%20Tools/LeakDiag/安装好,默认是在c:\leakdiag然后写一个测试程序来测试#include<st... 阅读全文
posted @ 2010-12-04 15:19 oayx 阅读(2389) 评论(0) 推荐(0) 编辑
摘要:LeakDiag是一个监测内存泄漏的工具,可以用来精确地找到内存泄露一直到代码行。它使用微软的Detours 技术,拦截指定内存分配的调用并跟踪各种调用栈,并报告已分配但尚未释放的内存,这一信息允许让我们在排除一个内存泄露问题时,能精确查看哪些组件进行了该分配。使用正确的调试符号,我们甚至可以看见请求分配的代码行。关于detours: http://research.microsoft.com/e... 阅读全文
posted @ 2010-12-04 15:19 oayx 阅读(802) 评论(0) 推荐(0) 编辑
摘要:《软件调试》,是2008年6月份出的新书,我觉得比较适合用C++用了比较长时间的人看,这可以提高他们的调试水平。其实,评价一个人是否是编程高手,主要还是看当程序出问题时调试能力。这本书在当当网上打折后是96元。以下是这本书的一些介绍:ACM院士和调试技术先驱Jack B.Dennis教授做历史回顾计算机和操作系统领域资深专家David A.Solomon撰写序言。调试高手笔耕三载集十余年经验成百万... 阅读全文
posted @ 2010-09-24 15:36 oayx 阅读(843) 评论(1) 推荐(0) 编辑