随笔分类 -  Windows C/C++开发

摘要:聊聊Disruptor 和 Aeron 这两个开源库 Disruptor The best way to understand what the Disruptor is, is to compare it to something well understood and quite similar 阅读全文
posted @ 2020-04-19 12:51 SolidMango 阅读(2600) 评论(2) 推荐(1) 编辑
摘要:c++ 单元测试框架 gmock 深度剖析 随着微服务和CI的流行,在目前的软件工程领域中单元测试可以说是必不可少的一个环节,在TDD中,单元测试更是被提高到了一个新的高度。但是很多公司由于很多不同的原因,没有能持续维护,或者干脆就从来没有写过单元测试,确实,单元测试在初期和代码维护期会需要花一些投 阅读全文
posted @ 2018-08-19 10:34 SolidMango 阅读(7092) 评论(1) 推荐(2) 编辑
摘要:现代C++新四大名著及C++学习杂谈 翻开自己的博客,在2012年8月我曾经写过如下一篇博客, <<C++学习的方法以及四大名著>> http://www.cnblogs.com/pugang/archive/2012/08/17/2643710.html 想想时间过得真快,转眼5年了,在这5年中C 阅读全文
posted @ 2017-07-30 13:05 SolidMango 阅读(5365) 评论(4) 推荐(4) 编辑
摘要:C++程序设计之四书五经作者:荣耀 C++是一门广泛用于工业软件研发的大型语言。它自身的复杂性和解决现实问题的能力,使其极具学术研究价值和工业价值。和C语言一样,C++已经在许多重要的领域大获成功。然而,一个不可否认的现实是,在低阶程序设计领域,C++挤压着C同时也在承受着C的强烈反弹,而在高阶程... 阅读全文
posted @ 2015-07-02 19:48 SolidMango 阅读(890) 评论(0) 推荐(0) 编辑
摘要:Windows GUI代码与Windows消息问题调试利器记得很久前有这么一种说法: 人类区别于动物的标准就是工具的使用。同样在软件开发这个行业里面,对于工具的使用也是高手和入门级选手的主要区别,高手往往靠工具的使用在关键的时候打开局面,在适当的时候使用适当的工具就往往可以事半功倍。首先让我们来讨论... 阅读全文
posted @ 2014-06-08 20:04 SolidMango 阅读(2103) 评论(1) 推荐(3) 编辑
摘要:ATL是如何实现线程安全的引用计数和多线程控制的正如标题所示,这是我经常被问到的一个问题,而每次我都从头开始给人说一次,其实说来过程理解起来的确有点复杂。我们的每一个ATL Server Object都继承于CComObjectRootEx, 而这个类其实就是秘密最核心的地方。大家想必都知道COM技术的对象存在于套间之中,套间主要分为单线程套间和多线程套间,而套间决定了引用计数的实现方式,对于单线程套间,根本不需要保护,所以引用计数的和关键数据保护的实现相对简单,而多线程套间其引用计数和数据保护实现起来就比较讲究,所有数据都需要保护。但是问题来了,我们如果都按照单线程套间的实现方式,显然不能满 阅读全文
posted @ 2014-03-08 14:37 SolidMango 阅读(2608) 评论(1) 推荐(1) 编辑
摘要:Windows C++ 导出和导入纯DLL函数(非COM)总结多年以前由于DLL hell 问题人们很少在直接从dll文件导出函数并且直接使用,但是有时候事情的解决方案不是我们可以选择的,今天在解决一个问题的时候,还是不得已选择了一个这样的方式。但是搜索了一下,网上关于这个问题的总结文章都写的不是很... 阅读全文
posted @ 2012-11-07 14:39 SolidMango 阅读(5237) 评论(2) 推荐(2) 编辑
摘要:最近和一个朋友闲聊的时候他对我说一个人对C++的理解很多种境界,朋友不是个喜欢吹牛的人,于是听他细说,觉得很是有道理。想写一篇C++ traits方面的文章已经有一段时间了,但是说实话traits这项技术确实有些晦涩,很担心写完了达不到期望的效果,于是每每试图以简炼的文字表达,慢慢的就等到了今天。先说说我为什么专门对这项技术写一篇文章吧。记得当时在看STL/boost代码的时候经常遇到traits,当时惊叹于代码原来可以这样写,但是最初根本是看不懂的,查了一些资料才彻底理解了traits存在的意义。本质定义:加上一层间接性,换来以定的灵活性。看下面的代码:template<typenam 阅读全文
posted @ 2012-10-17 11:19 SolidMango 阅读(28147) 评论(12) 推荐(6) 编辑
摘要:给C++初学者的50个忠告 1.把C++当成一门新的语言学习(和C没啥关系!真的。); 2.看《Thinking In C++》,不要看《C++变成死相》; 3.看《The C++ Programming Language》和《Inside The C++ Object Model》,不要因为他们很难而我们自己是初学者所以就不看; 4.不要被VC、BCB、BC、MC、TC等词汇所迷惑——他们都是集成开发环境,而我们要学的是一门语言; 5.不要放过任何一个看上去很简单的小编程问题——他们往往并不那么简单,或者可以引伸出很多知识点; 6.会用Visual C++,并不说明你会C++;... 阅读全文
posted @ 2012-09-26 21:00 SolidMango 编辑
摘要:上次写了一篇文章,Windows代码heap内存分析实战 由于时间的关系,写的不是很详细,于是有朋友建议写的详细些,于是有了本文。Windows C++代码heap分析详解Windows代码占用的内存主要是堆和栈,其中栈内存又被称为自动内存,一般为系统自动管理,所以常见的问题主要发生在堆内存上。系统中如果分配了堆内存而不释放,或者错误释放,都会产生问题。首先来分析一下堆内存的主要结构:对于普通的堆:1. CreateHeap -> creates a _HEAP2. AllocHeap -> creates a _HEAP_ENTRY对于页堆 (gflags.exe /i +hpa 阅读全文
posted @ 2012-09-21 14:28 SolidMango 阅读(3037) 评论(2) 推荐(1) 编辑
摘要:知识这东西有时候很奇怪,每次当你重新审视他的时候可能都会有新的收获。最近为了研究一个内存相关的问题,把windows heap相关的内容又复习了一遍,收获不小,记录一下,希望有朋友使用的时候少走些弯路。老话说的好,知己知彼方可百战不殆,没准备就去打仗无异于以卵击石,后果可想而知,那分析heap的问题需要什么基础知识呢:1. Windows 基础知识,内存模型,什么是堆,堆内存是如何管理的,不了解的,建议学习<windows internals>。2. 如何调试相关的问题,如何选择工具,建议学习windbg相关的命令。3. 如何配置系统,如何启动页堆,如何使用gflag。4. 相关的 阅读全文
posted @ 2012-09-14 17:34 SolidMango 阅读(3732) 评论(2) 推荐(1) 编辑
摘要:C++ Type traitsby John Maddock and Steve ClearyThis is the draft version of an article that appeared in the October 2000 issue ofDr Dobb's JournalGeneric programming (writing code which works with any data type meeting a set of requirements) has become the method of choice for providing reusable 阅读全文
posted @ 2012-09-06 21:31 SolidMango 编辑
摘要:Traits: a new and useful template techniqueThis article appeared inC++ Report, June 1995 issue.by Nathan C. MyersInternationalizing the Standard C++ Library requiredinventing some novel techniques, one of which is the unexpectedlyuseful traits -- it radically simplifies the interfaceto class templat 阅读全文
posted @ 2012-09-06 21:29 SolidMango 编辑
摘要:What is Predicate?From: http://www.sgi.com/tech/stl/Predicate.htmlA Predicate is a Unary Function whose result represents the truth or falsehood of some condition. A Predicate might, for example, be a function that takes an argument of type int and returns true if the argument is positive.Effective 阅读全文
posted @ 2012-09-02 10:17 SolidMango 编辑
摘要:Exceptional C++ 精华代码—实现异常安全的Stack最近赶上15号台风过境,意外的休息了半天,于是重新读了一遍Exceptional C++,在网上找了一下书中关于实现异常安全的Stack的代码,但是基本上都组织的有些乱,于是将其整理一下,并加以自己的注释,希望对学习C++的朋友们有所帮助。首先关于这段代码是以分离实现的方式组织的,真正的实现代码和接口类分离,首先是StackImpl实现,所有的内存操作相关的工作都移到这个类中实现的:--Separate Implementation class---Implementation of StackImpl--template &l 阅读全文
posted @ 2012-08-29 15:04 SolidMango 阅读(1591) 评论(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 阅读(11108) 评论(6) 推荐(0) 编辑
摘要:转载自:http://www.gotw.ca/gotw/060.htmGuru of the Week:http://www.gotw.ca/gotw/index.htmException-Safe Class Design, Part 2: InheritanceDifficulty: 7 / 10What does IS-IMPLEMENTED-IN-TERMS-OF mean? It may surprise you to learn that there are definite exception-safety consequences when choosing between i 阅读全文
posted @ 2012-08-21 14:50 SolidMango 编辑
摘要:C++学习的方法以及四大名著(荐)转眼间学习和使用C++已经有近10个年头了,开始学习的时候走了不少的弯路,今天有些时间,希望写下这篇文章并且对开始学习C++的朋友有些帮助。当然我首先需要说明的是,这篇文章是根据本人的感受写的,可能不同的人有不同的观点,欢迎讨论。开始学习C++的时候中国的互联网环境还不是很好,信息也比较闭塞,所以自己开始的时候是由Thinking in C++ 开始的,买了两卷本的英文版,废了好大的一番周折才算看完了,这个过程大约花费了近6个月的时间,当然期间也要花时间完成学业。后来就有这个根基开始了不断的写代码,做ACM的题,渐渐开始了C++真正的旅程。时至今天我发现,其实 阅读全文
posted @ 2012-08-17 11:17 SolidMango 阅读(12816) 评论(59) 推荐(18) 编辑
摘要:应用C++ STL以最小堆方法解决Top K 问题问题的来源我想不必多言了,很多的面试题中,以及<编程之美>中都有对问题的描述,以及相关的解法,写本文的目的是以C++ STL的方式用最小堆解法解决这个问题。那么什么是最小堆呢?其实最小堆是一颗特殊二叉树,其父节点的key小于其孩子节点,对!最小堆不是堆,是二叉树!最小堆解法其实可以将问题的时间复杂度缩减到nlgK, 但是本文由于没有在C++ STL 中找到合适的函数保持最小堆(如果用自己写代码可以做到lgk),所以必须每次重建最小堆(如果您有更好的建议,欢迎指点),因此,时间复杂度为nk, 另外本文假设k<<n.#inc 阅读全文
posted @ 2012-07-04 17:06 SolidMango 阅读(9768) 评论(10) 推荐(3) 编辑
摘要:快速排序算法C++实现[评注版] 经常看到有人在网上发快速排序的算法,通常情况下这些人是在准备找工作,或者看<算法导论>这本书,而在他们发布的代码通常是差不多的版本,估计也是网上copy一下,自己改改,跑过了就算了,但是通常这样玩根本没有太大作用,如果到一家公司,给你一台不能上网的笔记本,20分钟, 阅读全文
posted @ 2012-06-27 09:27 SolidMango 阅读(29265) 评论(7) 推荐(3) 编辑