2013年3月21日

C++ template metaprogramming 几年前写的,移过来

摘要: meta,其意思是在…中,在…后,中文把它叫做“元”。例如,描述数据的数据,称之为元数据(metadata),而metaprogramming可以理解为运用程序语言自身的某种特性,对程序语句进行编程,更简洁些,就是对编程的编程――元编程。 在C++领域,元编程有两种手段,一种是使用宏,一种是使用模板,templatemetaprogramming,也就是模板元编程,本文将以我使用C++模板元编程的经验简单举例说明。 C++模板元编程(以下简称TMP)的由来有一段故事:当年C++为了向泛型编程推进,引入了模板,之后在一次世界性的学术研讨会议上,有牛人演示了一份程序代码。这份程序代码特别之... 阅读全文

posted @ 2013-03-21 21:48 rickerliang 阅读(380) 评论(0) 推荐(0) 编辑

2013年3月19日

Branch Prediction 与 Branch Predication的区别

摘要: Branch Prediction和BranchPredication都是针对程序分支语句影响硬件执行效率而提出的技术。BranchPrediction应用于CPU,目标是保证最高的线程执行效率。BranchPredication应用于SPMD结构的运算设备,这类设备以吞吐量为首要目标,GPU就是这类设备的代表。BranchPrediction Branch Prediction,即分支预测,目的是保证大部分时间下CPU流水线都处于满负荷状态,保证正在执行的线程以最高效率运行。CPU流水线可大致划分为4个阶段:指令预取、指令解码、执行和结果回写。当程序代码出现条件分支语句时,条件分支语句... 阅读全文

posted @ 2013-03-19 20:17 rickerliang 阅读(1411) 评论(0) 推荐(0) 编辑

C++ allocator简记

摘要: 最近听同事说,某公司面试问到了C++allocator相关的问题。 allocator模版本质是stl容器对内存管理的一组需求,泛型编程里称之为concept。自己制作allocator时,只要满足这些需求就没有问题了。值得注意的是,allocator内一个很有趣的结构,不得不提,这就是rebind,它的目的就是:通过一个已具体化的allocator class得到另一个具体化的allocator class,这是对class的编程,可以认为是简单的模版元编程。例如allocator<int>::rebind<long>::other就是一个allocator<l 阅读全文

posted @ 2013-03-19 19:59 rickerliang 阅读(379) 评论(0) 推荐(0) 编辑

2012年12月5日

Quaternion简记

摘要: q=(x,y,z,w)=(u,w)u是虚部向量,w是实部,当然,也可以标记为(a+bi+cj+dk),这时a是实部,b,c,d是虚部向量以下是在quaternion上的相等加减乘除的定义(u,a)=(v,b) 紧当u=v a=b时成立(u,a)±(v,b)=(u±v,a±b)(u,a)(v,b)=(av+bu+u×v,ab-u·v)乘法略显怪异,但之后你会发现这样定义的乘法是很有用的令p=(u,p4)=(p1,p2,p3,p4) q=(v,q4)=(q1,q2,q3,q4),乘法展开,其中u×v = (p2q3-p3q2,p3q1-p 阅读全文

posted @ 2012-12-05 20:33 rickerliang 阅读(566) 评论(0) 推荐(0) 编辑

2012年11月28日

XNA::ComputeFrustumFromProjection的一些注释

摘要: ComputeFrustumFromProjection是通过投影矩阵计算出view space下frustum的函数,Frustum在XNA内用这个结构描述struct Frustum{XMFLOAT3 Origin;XMFLOAT4 Orientation;FLOAT RightSlope;FLOAT LeftSlope;FLOAT TopSlope;FLOAT BottomSlope;FLOAT Near, Far;} 其中,view space下frustum的origin是原点,orientation是identity transform,所以,函数主要工作是通过projec... 阅读全文

posted @ 2012-11-28 14:31 rickerliang 阅读(562) 评论(0) 推荐(0) 编辑

2011年9月14日

CRT堆

摘要: CRT堆N年前,在探讨C++对象创建及管理方法时,写了些代码,管理对象 (factory method、singleton、prototype),发现了windows进程及dll退出时的一些行为及由此引起的问题,本文将问题列举并进行讨论,以下讨论都是以程序静态连接为前提,在本文的最后将会回过头来讨论这个大前提,并提出一些解决问题的方法。CRT堆首先CRT就是C RunTime的缩写,意思是C运行库。CRT可以理解为windows操作系统对C语言提供的一套支撑库,使得C程序通过C标准库函数就能与操作系统交互,而不需要调用windows API。普通CRT进程退出时,会首先以LIFO调用atexi 阅读全文

posted @ 2011-09-14 21:37 rickerliang 阅读(3366) 评论(2) 推荐(4) 编辑

2011年9月13日

N年前的LiveForSpeed破解历程(3)

摘要: 本文完成于2007年,现在把它搬到这里,留作纪念。另外,现在的LiveForSpeed用户注册体系已有很大改变,本文可能已经失去参考价值。1.程序本身包含一串 注册表键名称的密文0x00567eb8:Software\Microsoft\Windows\CurrentVersion2.用程序本身保存的一个TEA key 0x00592f60解注册表名称密文,得到明文Software\Microsoft\Windows\CurrentVersion3.程序首先对明文进行处理,尝试读取Software\Microsoft\Windows NT\CurrentVersion下的ProductId,如 阅读全文

posted @ 2011-09-13 23:58 rickerliang 阅读(1082) 评论(0) 推荐(0) 编辑

N年前的LiveForSpeed破解历程(2)

摘要: 本文完成于2007年,现在把它搬到这里,留作纪念。另外,现在的LiveForSpeed用户注册体系已有很大改变,本文可能已经失去参考价值。已经开始X版keygen补完计划(X版已经有keygen了,是noword出的,Y版已出了-_-!!!),创造属于自己的keygen用noword生成的f2.xxx和f3.xxx的密文解出datakey,再用自己的TEA key加密,再生成TEA key对应的f1.xxxnoword是使用了lfs的正版license制作他的keygen,而我就使用noword的keygen生成的license制作自己的keygen先从入手f3.xxx入手,f3.xxx是64 阅读全文

posted @ 2011-09-13 23:51 rickerliang 阅读(1161) 评论(0) 推荐(0) 编辑

N年前的LiveForSpeed破解历程(1)

摘要: LiveForSpeed早期版本的破解,逆向工程 阅读全文

posted @ 2011-09-13 23:39 rickerliang 阅读(1751) 评论(0) 推荐(0) 编辑

2011年7月29日

WebGL tutorial

摘要: 不错,收藏http://learningwebgl.com/blog/?page_id=1217 阅读全文

posted @ 2011-07-29 17:13 rickerliang 阅读(248) 评论(0) 推荐(0) 编辑

导航