摘要:发现有一些问题几乎是所有的新人都会遇到,而且也常因为缺乏一些基本的知识而无从下手。函数调用栈的内容就是其中之一。于是花点时间把以前写的内容整理出来。 程序在运行期间,内存中有一块区域,用来实现程序的函数调用机制。这块区域是一块LIFO的数据结构区域,我们可以叫函数栈(调用栈)。每个未退出的函数都会...
阅读全文
摘要:背景 GMock 我们项目中现在的模块测试框架使用了CATCH+GMock的方式实现回归测试和打桩。 GMock的介绍在官网上有,这里为了铺垫,大概地描述一下GMock能实现的效果。大约可以看成这样: void A() { if(B()) { //... } Else{ //... } } A是被测函...
阅读全文
摘要:C++的语言品味是独特的,喜欢的人特别喜欢,讨厌的人特别讨厌。虽然Bjane Stroustrup不断地宣称C++的发展方向是新手友好的,但实际上对新手来说,最重要的还是有强大方便的标准库可以使用(像Java/C#/Python之类),让程序员们可以迅速地完成手头的工作。Bjane Stroustrup本人也看到这个问题,并经常强调强加标准库的重要性,不过好像标准委员会并没有太理会这个事,大部的提...
阅读全文
摘要:在这篇博文里,我提到了一个例子,说的是使用C++实现类型安全的printf。这个例子很惊艳,但是在我写程序的时候,并非那么“迫切”地需要它出现在我的工具箱中,因为它并不比普通的printf方便,而且它没有出现的标准库中。所以自己也懒得整。相反,这个函数的兄弟,sprintf,倒是一个非常需要的函数。不仅仅是因为需要它类型安全,而是 sprintf 有比 printf 更多的麻烦: 首先它确...
阅读全文
摘要:作者:唐风 主页:www.cnblogs.com/liyiwen 前几个星期买了,一直没有直接细翻,买的时候看了背面的两个推荐,一个是孟岩,一个是Scott Meyers(Effective C++系列的作者)。二牛推荐必属精品,于是没有细读,直接买下。 这次去往返合肥,不想带什么行李,包里就只装了这本书,于是在火车上花时间翻了一遍。这才确认,原来这本书居然成书于1995年……那...
阅读全文
摘要:《C++ concurreny in action》 第五章 C++的内存模型和原子操作 5.1 Memory model basics (内在模型基础) Memory model 涉及两个方面:structural 和 concurrency structural 是基础,主要是对象的布局 5.1.1 Objects and memory location The C++ Standa...
阅读全文
摘要:唐风 www.cnblogs.com/liyiwen 《C++ concurreny in action》 第四章 Synchronizing concurrent operations 这一章主要讲C++11中的进行线程同步的方法 4.1 Waiting for an event or other condition 经常遇到的一种场景是一个线程A需要等待另一个线程B完成一些“事”(操作)才能往下运行继续处理。 有以下几种“办法” 一,设置一个多个线程都能访问到的变量,B线程一旦完成自己的操作,就把这个全局的变量设为某个值,而线程A则 不断地去检查变量的值是不是已经设置为这个...
阅读全文
摘要:作者:唐风 主页:www.cnblogs.com/liyiwen C++11已经问世两年了,各大编译器也都加紧跟进对C++11的特性和库的实现(这里有一份GCC,MSVC,CLANG的对C++11的支持情况表)。在我们还没有来得及消化新的C++的时候,C++标准委员会并没有停下。从C++11正式发布到今天,他们一直在为C++14(以及以后的C++17)努力工作着。4月20日,来自C++标准委员会的网站上的一篇新闻说,用于 C++14 的投票草案已经完成。这意味着 C++14的内容基本上要定型了,这其中包括: generic lambdas(泛型的lambda表达式,也就是...
阅读全文
摘要:唐风 www.cnblogs.com/liyiwen 《C++ concurreny in action》 第三章 sharing data between threads 3.1 线程间共享数据的“问题” invariants 被破坏(比如说一个读一个写) 3.1.1 race conditions 条件竞争是: In concurrency, a race condition is anything where the outcome depends on the relative ordering of execution of operations on two o...
阅读全文
摘要:第一章 Why use concurrency,There are two main reasons to use concurrency in an application: separation of con-cerns and performance.(这句写得很精辟:) 我:分离实现逻辑,然后使用“状态迁移表”这种消息驱动的方式,用在APP的设计上非常的方便。 什么时候不要使用con...
阅读全文
摘要:作者:唐风 主页:http://www.cnblogs.com/muxue C++11 语言核心的改进中,最为关注的有 rvalue reference (这里有一篇拙作),lambda,variadic template。rvalue 规则稍微复杂,但一旦理解和记住了,应用上就没有什么困难...
阅读全文
摘要:作者:唐风 原载:www.cnblogs.com/liyiwen 关于类型擦除,在网上搜出来的中文资料比较少,而且一提到类型擦除,检索结果里就跑出很多 Java 和 C# 相关的文章来(它们实现“泛...
阅读全文