摘要: 知识这东西有时候很奇怪,每次当你重新审视他的时候可能都会有新的收获。最近为了研究一个内存相关的问题,把windows heap相关的内容又复习了一遍,收获不小,记录一下,希望有朋友使用的时候少走些弯路。老话说的好,知己知彼方可百战不殆,没准备就去打仗无异于以卵击石,后果可想而知,那分析heap的问题需要什么基础知识呢:1. Windows 基础知识,内存模型,什么是堆,堆内存是如何管理的,不了解的,建议学习<windows internals>。2. 如何调试相关的问题,如何选择工具,建议学习windbg相关的命令。3. 如何配置系统,如何启动页堆,如何使用gflag。4. 相关的 阅读全文
posted @ 2012-09-14 17:34 SolidMango 阅读(3758) 评论(2) 推荐(1) 编辑
摘要: Exceptional C++ 精华代码—实现异常安全的Stack最近赶上15号台风过境,意外的休息了半天,于是重新读了一遍Exceptional C++,在网上找了一下书中关于实现异常安全的Stack的代码,但是基本上都组织的有些乱,于是将其整理一下,并加以自己的注释,希望对学习C++的朋友们有所帮助。首先关于这段代码是以分离实现的方式组织的,真正的实现代码和接口类分离,首先是StackImpl实现,所有的内存操作相关的工作都移到这个类中实现的:--Separate Implementation class---Implementation of StackImpl--template &l 阅读全文
posted @ 2012-08-29 15:04 SolidMango 阅读(1598) 评论(0) 推荐(1) 编辑
摘要: 使用Windows API PostThreadMessage进行线程间消息通信相信好多人都听过这个Windows API:PostThreadMessage,今天终于有时间来详细的研究一下,据我所知好多的公司在面试的时候都会提到这个API,因为常写代码的人一定会知道这个API,通过这个提问,可以考察一个人对细节的掌握程度。不多说了,开始正题。如下函数原型From MSDN:BOOL WINAPI PostThreadMessage(_In_DWORD idThread,_In_UINT Msg,_In_WPARAM wParam,_In_LPARAM lParam);idThread - [ 阅读全文
posted @ 2012-08-24 15:13 SolidMango 阅读(11141) 评论(6) 推荐(0) 编辑
摘要: C++学习的方法以及四大名著(荐)转眼间学习和使用C++已经有近10个年头了,开始学习的时候走了不少的弯路,今天有些时间,希望写下这篇文章并且对开始学习C++的朋友有些帮助。当然我首先需要说明的是,这篇文章是根据本人的感受写的,可能不同的人有不同的观点,欢迎讨论。开始学习C++的时候中国的互联网环境还不是很好,信息也比较闭塞,所以自己开始的时候是由Thinking in C++ 开始的,买了两卷本的英文版,废了好大的一番周折才算看完了,这个过程大约花费了近6个月的时间,当然期间也要花时间完成学业。后来就有这个根基开始了不断的写代码,做ACM的题,渐渐开始了C++真正的旅程。时至今天我发现,其实 阅读全文
posted @ 2012-08-17 11:17 SolidMango 阅读(12848) 评论(59) 推荐(18) 编辑
摘要: Bcdedit 用法详解昨天写了一篇文章< Windows Server 2008 R2 如何启动kernel dbg进行双机内核调试『配置详解』>其中提及到Bcdedit,但是并没有对其进行详细的解释,作为续篇,本文对其用法发进行讨论。Bcdedit用于对vista及其以后版本的windows进行启动配置,当然内核调试的启动也是基于这个工具的。好吧,言归正传,开始对配置进行讨论。首先如果想对启动项进行配置必须得先加入一个boot entry, adding Boot Entry 过程如下,我们可以选择从当前的启动项拷贝一份,然后做些必要的改动,具体命令如下:bcdedit /co 阅读全文
posted @ 2012-07-25 16:04 SolidMango 阅读(1841) 评论(2) 推荐(1) 编辑
摘要: 相信windbg大家都不陌生,其提供了一个异常强大的功能就是kernel dbg, 在不同版本的windows 系统中启动kernel dbg的方式不禁相同,为了方便大家使用kernel dbg,本文对Windows Server 2008 R2系统上如何对其进行配置进行了讨论。Kernel dbg 对于系统程序员尤为重要,特别是驱动开发,经常需要和kernel dbg打交道,另外好多涉及到系统的用户态问题也需要内核调试,其重要性不言而喻,希望本文给您的内核之旅开个好头。对于Windows XP 启动内核调试相对简单,只要在boot.ini中加上相应的启动项就可以启动kernel dbg 故在 阅读全文
posted @ 2012-07-24 16:52 SolidMango 阅读(2159) 评论(2) 推荐(0) 编辑
摘要: 重读<算法导论>记得多年前学数据结构的时候作为教材的延伸读物我拜读了<算法导论>,当时有选择的读了大约2/3的东西,只学理论和算法实在枯燥,看书之余动手写了其中的一些算法,但是由于实在不知道这些知识有什么用处,剩余的1/3大部分是一些具体的理论推导和稍微复杂的算法。那么,为什么近期又重读这本算法著作呢?首先就是我遇到问题了,在前一阵的工作中频繁出现红黑树的分析问题,我不得不根据红黑树的排列去查找STL Map 中的内容,每次出现问题都要去内存中找出有用的状态。其次就是在研究V8的时候我觉得有必要系统的研究一下编译器实现,于是研究了一段时间的<龙书>,那段时间 阅读全文
posted @ 2012-07-12 16:34 SolidMango 阅读(2205) 评论(16) 推荐(0) 编辑
摘要: 应用C++ STL以最小堆方法解决Top K 问题问题的来源我想不必多言了,很多的面试题中,以及<编程之美>中都有对问题的描述,以及相关的解法,写本文的目的是以C++ STL的方式用最小堆解法解决这个问题。那么什么是最小堆呢?其实最小堆是一颗特殊二叉树,其父节点的key小于其孩子节点,对!最小堆不是堆,是二叉树!最小堆解法其实可以将问题的时间复杂度缩减到nlgK, 但是本文由于没有在C++ STL 中找到合适的函数保持最小堆(如果用自己写代码可以做到lgk),所以必须每次重建最小堆(如果您有更好的建议,欢迎指点),因此,时间复杂度为nk, 另外本文假设k<<n.#inc 阅读全文
posted @ 2012-07-04 17:06 SolidMango 阅读(9799) 评论(10) 推荐(3) 编辑
摘要: 快速排序算法的时间复杂度分析[详解Master method]经常听人谈起各种排序算法的时间复杂度,这个是O(n2)的,那个是O(n)的,这些人讲起来可谓滔滔不绝,但是你停下来问问他为什么这个是这个复杂度,他是怎么算出来的?往往没几个人能说出来。这个是一个浮躁的社会,大家都追求速度,到处复制,粘贴代码,拿人家的代码跑一便,就说自己会了这个,会了那个..也许有人觉得算法分析的太深没有用,但是笔者认为,有时候了解细节很重要,比如快速排序算法的时间复杂度,有时候是O(nlgn), 有时候就是O(n2), 在你不知道自己数据特性的情况下,很难选择是否使用快速排序,因为他并不总是最快的。说了些没用的,让 阅读全文
posted @ 2012-07-02 14:02 SolidMango 阅读(57082) 评论(13) 推荐(6) 编辑
摘要: 快速排序算法C++实现[评注版] 经常看到有人在网上发快速排序的算法,通常情况下这些人是在准备找工作,或者看<算法导论>这本书,而在他们发布的代码通常是差不多的版本,估计也是网上copy一下,自己改改,跑过了就算了,但是通常这样玩根本没有太大作用,如果到一家公司,给你一台不能上网的笔记本,20分钟, 阅读全文
posted @ 2012-06-27 09:27 SolidMango 阅读(29302) 评论(7) 推荐(3) 编辑