2013年11月22日

Trailing return types

摘要: Trailing return types是C++11关于函数声明的语言特性之一,旨在解决模版编程遇到的语法相关的问题,先看一个简单例子,感受一下什么是trailing return types:C++03:int func(int i, int j);C++11可以写成:auto func(int i, int j) -> int;最直观感受就是,函数返回类型声明后置.新的声明方式配合模版,可以使编译器自动推导模版函数的返回类型,使模版函数更泛化,例如:C++03:templateRet func(C1 i, C2 j){ return i + j;}当你这样调用func(1, 2.0 阅读全文

posted @ 2013-11-22 11:55 rickerliang 阅读(752) 评论(0) 推荐(0) 编辑

2013年11月18日

Welcome Back to C++ (Modern C++)

摘要: http://msdn.microsoft.com/en-us/library/hh279654.aspx看看你是古代还是现代Cpper重点强调Stack-based scope instead of heap or static global scope.Auto type inference instead of explicit type names.Smart pointers instead of raw pointers.std::stringandstd::wstringtypes (see) instead of rawchar[]arrays.Standard templat 阅读全文

posted @ 2013-11-18 17:12 rickerliang 阅读(410) 评论(0) 推荐(0) 编辑

2013年11月2日

C++11并发内存模型学习

摘要: C++11标准已发布多年,编译器支持也逐渐完善,例如ms平台上从vc2008 tr1到vc2013。新标准对C++改进体现在三方面:1.语言特性(auto,右值,lambda,foreach);2.标准库(智能指针,容器,函数式编程);3.还有最重要,又最容易被忽视的改进,并发内存模型标准的制定。 什么是内存模型? 输入一定的内存操作序列,得到一定的内存结果,这种对应关系的集合,就是内存模型,任何一种CPU架构,都有该架构对应的内存模型。C++语言规范定义了一个虚拟机,这个虚拟机的指令集就是标准C++语句,虚拟机执行C++语句,对内存操作并得到相应的结果,这就是C++内存模型。直到C++03. 阅读全文

posted @ 2013-11-02 01:26 rickerliang 阅读(1107) 评论(0) 推荐(0) 编辑

2013年8月19日

C++0x对局部静态初始化作出了线程安全的要求,singleton的写法可以回归到最原始的方式

摘要: class Foo{public: staticFoo& instance(void) { static Foo s_instance; return s_instance; }};以下摘自ISOIEC 14882 C++116.7.4The zero-initialization (8.5) of all block-scope variables with static storage duration (3.7.1) or thread storage duration (3.7.2) is performed before any othe... 阅读全文

posted @ 2013-08-19 17:39 rickerliang 阅读(389) 评论(0) 推荐(0) 编辑

2013年7月14日

两次fopen不同的文件返回相同的FILE* 地址

摘要: 最近接触一个垃圾程序,出现一个奇怪的bug,现象是两次fopen不同的文件返回相同的FILE*地址,第二次返回的FILE*有时候无端端的就被关闭了。以下代码是对这个bug的概括:auto fp1 = fopen("c:/1.txt", "rb"); char buff[10]; assert(fread(buff, 1, 10, fp1) == 10); // 垃圾程序关闭fp1时没有至fp1=nullptr fclose(fp1);// 微软的crt对FILE*使用缓存机制,所以这里返回的fp2==fp1,可参考stream.c里的_getstream 阅读全文

posted @ 2013-07-14 16:45 rickerliang 阅读(858) 评论(2) 推荐(0) 编辑

2013年5月19日

最近不知道什么时候开始D3D11CreateDevice返回E_FAIL

摘要: 查了一下MSDN,说这个函数返回E_FAIL表示:Attempted to create a device with the debug layer enabled and the layer is not installed.一个临时解决方法就是不要带debug layer创建设备。 最后上网查了一下,发现是安装KB2670838引起的,KB2670838详细说明里也有提到debug layer的问题及解决方法,http://support.microsoft.com/kb/2670838/en-us?fr=1,其中一个方法就是安装Windows 8 SDK。 阅读全文

posted @ 2013-05-19 18:39 rickerliang 阅读(680) 评论(0) 推荐(0) 编辑

2013年5月14日

Adaptive Transparency

摘要: 最近看到一篇OIT的文章,文章里介绍了一种新方法实现OIT,文章可以在这里找到http://software.intel.com/en-us/articles/adaptive-transparency/,http://software.intel.com/en-us/articles/adaptive-transparency-hpg-2011。文章内介绍的方法把经典alphablending的递归混合公式拆开,避开backtofront的渲染限制,从而实现OIT。 首先回顾一下经典alphablending公式:C0=α0c0Cn=αncn+(1-αn)Cn-1其中,α代表该颜色的覆... 阅读全文

posted @ 2013-05-14 16:28 rickerliang 阅读(752) 评论(0) 推荐(0) 编辑

2013年4月4日

C++ allocator及一些影响程序性能的因素

摘要: 之前的文章里介绍过c++的allocator。既然c++标准库已经有一份标准实现,我们为什么还要自己去实现allocator呢?出于性能的考虑,很多程序都会实现自己的allocator,避免使用标准库allocator。标准库allocator究竟在那些方面会影响程序性能,下面一一分析:1.标准allocator会涉及systemcall,导致程序出现user-kernel-user的模式切换。模式切换需要额外的cpu周期。频繁地使用标准allocator分配内存(例如在一个while循环内),模式切换所消耗的cpu周期就会叠加。自定义的allocator使用预分配内存池,避免发起syst.. 阅读全文

posted @ 2013-04-04 00:50 rickerliang 阅读(439) 评论(0) 推荐(0) 编辑

2013年3月30日

纹理映射

摘要: 实时渲染领域内,纹理拾取、映射及过滤涉及大量理论知识,本文是对这些知识的总结和梳理,方便日后查阅。本文本应该在2011年末的时候出现,由于从那时起我就被无尽的加班缠绕,直到最近才得以解脱,所以到现在才有时间完成这个总结。纹理拾取、映射及过滤在实际应用主要集中在pixelshader阶段。ShaderModel3.0引入vertextexturefetch(VTF,可实现HeightMapping和DisplacementMapping),开启了在非pixelshader阶段进行纹理拾取的大门,而最新的ShaderModel5.0,纹理拾取可以在任意shader阶段进行(例如tessellat. 阅读全文

posted @ 2013-03-30 01:49 rickerliang 阅读(7731) 评论(2) 推荐(3) 编辑

2013年3月27日

AOP切面编程 几年前写的,移过来

摘要: 在2010年04月的经验交流会上,XXX工程师提及到使用AOP实现数据库连接自动控制这一技巧,但当时大部分同事都没有反应,可能是对AOP不太熟悉,所以我想在这里介绍以下AOP:什么是AOP、AOP能带给我们什么。首先我可以保证的是,AOP是一个非常牛逼的设计思维,认识到AOP的优点将对你的程序设计思维的提升有很大帮助。过滤器 我们首先来了解一个看上去跟AOP毫无关系的java类:servlet。Servlet是java一类class的总称,它实现了java的http支持。Servlet运行在servlet容器内,容器把http的请求按一定的规则路由到特定servlet,servlet处理... 阅读全文

posted @ 2013-03-27 22:09 rickerliang 阅读(486) 评论(0) 推荐(0) 编辑

导航