c++
lova1ing
这个作者很懒,什么都没留下…
展开
-
突发奇想续
简单写了点代码,把那个方程组生成树结构:[code]#include #include using namespace std;enum Type{ TNumber, TVariable, TOperator};enum Operator{ OAdd, OSub, OMul, ODiv, OAssign, ONone}...2006-12-13 09:50:45 · 114 阅读 · 0 评论 -
[C++之AOP]实战Aspect C++之观察者模式
Aspect C++支持“虚切面”,类似C++中的虚函数。方面可以继承,“派生方面”可以重写“基方面”的“虚切面”,类似C++中的类继承。有了这个特性,就可以实现一些模式了,这里列出AOP中经典的观察者(Observer)模式[注]。[注]这个说法不太妥当,观察者模式是经典的设计模式,这里的意思是说AOP经典的观察者模式实现。它的代码如下:aspect ObserverPattern { ...2005-12-17 10:21:00 · 575 阅读 · 0 评论 -
[C++之AOP]Aspect C++生成远程调用代码可能性探讨
C++ 0x keynote(以下简称0x)中描述了这样一个看起来不错的东西:1、本地调用代码: // use local object: X x; A a; std::string s("abc"); // … x.f(a, s); 2、使用远程代理wrapper层: // use remote object : proxy<X> x; x.connect("m...2005-12-19 22:50:00 · 174 阅读 · 0 评论 -
抛开析构函数
内存管理通常指的是堆上分配的空间,栈上分配虽然高效好用,但一般是固定大小的、不能持久保存的。堆上分配就有了释放的问题,代码中有一些是使用new/malloc来分配空间的,还有一些是使用内存池,如何在释放时区分是必须的。简单思考以后我感觉首先需要排除delete pObject这种调用,这显然是假定对象是用new分配出来的,或者是对象重载了new/delete操作符。也可以把对象根据分配方式...2007-08-15 22:19:38 · 96 阅读 · 0 评论 -
ABI Specifications 相关链接
Itanium C++ ABI ($Revision: 1.86 $)http://www.codesourcery.com/cxx-abi/abi.htmlC++ ABI Summaryhttp://www.codesourcery.com/cxx-abi/C++ ABI for IA-64: Code and Implementation Exampleshttp://www.codes...2006-03-23 16:08:00 · 95 阅读 · 0 评论 -
泛型矩阵类
矩阵就不用再解释了,写成泛型主要是为了几个方便:1、方便在栈上分配空间。由于维度在编译期已知,所以可以做到在栈上分配空间。当然如果这个对象是new出来的,自然是在堆上分配,这里说的是在栈上分配这个对象时,矩阵元素所占用的空间也在栈上分配。2、方便在编译期检查非法的矩阵运算。C++模板的强大推导能力可以在编译期推导出结果矩阵的维度。3、泛型类在方法内联上具有优势。这个矩阵类为了能够...2006-04-13 13:52:00 · 771 阅读 · 0 评论 -
高可用性Cache池
前段时间开发上线了一个Cache池,使用双层Cache池冗余,宕掉一台机器的Cache失效从1/N降到1/N^2。如果2层Cache池分开机器部署,失效率将会降到0。上线不久刚好碰上一次宕机事故,效果很好。该应用有16台Cache服务器,高峰时每秒访问约20万次,平时的命中率约为99.95%,宕掉一台会给8台db造成1.25万次/秒访问(因为命中率很高所以只计算宕机造成的Cache失效率),基本上...2009-06-15 16:10:53 · 115 阅读 · 0 评论 -
Cache Pool 架构
先比较一下Hadoop。Hadoop 架构:[img]/upload/attachment/115419/27a1a5f1-6e03-32ca-949b-bc7876823f2d.png[/img]Cache Pool 架构:[img]/upload/attachment/115420/9eb5d180-b664-32e0-97f7-168f648f70ea.jpg[/im...2009-06-16 10:05:55 · 239 阅读 · 0 评论 -
轻量级线程切换效率
同事测试了libcoro,它的linux版本可以使用4种模式,切换效率分别为:asm: 50,000,000 switch/ssetjmp/longjmp: 42,000,000 switch/sucontext: 2,400,000 switch/spthread: 50,000 switch/sasm版本保存的寄存器比较少,居然达到了5千万次每秒,可能和测试时线...原创 2009-07-13 12:07:18 · 185 阅读 · 0 评论 -
增加了monitor_node功能
给分布式框架增加了类似 erlang 的 monitor_node 功能,前几个项目都没用到,最近可能要用到了。还想增加 link 功能,不过跨 node 的 link 行为还不是很清楚。...原创 2009-07-13 14:57:02 · 220 阅读 · 0 评论 -
关于内存管理的一点想法
分布式轻量级线程框架(还没取名)最近几个修改:1、消息对象采用了引用计数,T1在去年一个贴子中建议过,当时不以为然,后来发现不使用引用计数有很多麻烦,还是加上了。2、协议buffer的管理,以前是每连接使用一个大缓冲区,对于几百上千个连接来说并不是什么问题,看到有些对外网的系统保持几万个长连接,这部分缓冲区占了上G内存。现在把它改成链式缓冲区了,缓冲区由多个PAGE链接组成,可动态增长和减...原创 2009-07-14 16:11:31 · 140 阅读 · 0 评论 -
[C++之AOP]实战Aspect C++之检查内存泄漏
前面简单介绍了Aspect C++,相信没人看出它有什么特别强大的地方。这次特别挑了一个合适的例子,检查内存泄漏。首先看一个普通的程序:1、test.h#ifndef __TEST_H__#define __TEST_H__class Test1{};class Test2{};class Test3{};#endif // __TEST_H__2、main.cc#include "te...2005-12-16 22:38:00 · 750 阅读 · 0 评论 -
C++之AOP
AOP是近年炒得很热,但却用得很少的一门技术,不过这并不能阻止我去学习它。既然能一度炒得火热,必定有过人之处。说AOP是一种思想或许更适合一些,它并不描述哪一种专有的技术,也不指定实现方式。众所周知,C++没有丰富的动态类型信息,更没有动态生成类的功能(C++类型在编译后就基本上没有类型存在了),所以无法像java一样采用动态代理来实现AOP。Aspect C++是C++的一个AOP实现,它...2005-12-15 15:43:00 · 605 阅读 · 0 评论 -
为C++实现一个IDL (零)
一、问题。这段时间考虑实现一个纯C++的分布式服务包装库,简要描述如下:有如下类和函数:struct Test{ void test1 (/*in*/ int v1, /*in*/ int* v2); int test2 (/*in*/ int& v1, /*out*/ int* v2);};int test_func (/*in*/ int* v1, /*inou...2005-09-15 01:27:00 · 438 阅读 · 1 评论 -
为C++实现一个IDL (一)
前面简单写了点静态结构,这一次将主要关注动态模型以及调用方式。这个系列的名字叫“为C++实现一个IDL”,实际上应该叫“为C++实现一个Remoting”可能更好一些,说是IDL,主要是想通过宏,使用简单的类型定义达到自动生成调用代码的目的。一、首先来看看调用习惯。从调用习惯入手,主要是因为看到目前有很多库/工具包在调用上都有很多不便之处。假如能在一开始就从这点出发,就能把调用接口设计...2005-09-17 19:40:00 · 702 阅读 · 0 评论 -
正式建立asgard项目 (因ancients已经被人使用了)
“为C++实现一个IDL”这个主题,我已经考虑得差不多了,最后几个问题也解决了,打算建立一个项目来实现它。项目命名为ancients,字面意思是“远古的,旧的”,实际上这个主题也算是旧的了。原本打算命名为C++ Remoting,不过想了一下,还是换个名字,免得让人一看就想拿去跟java, c#的remoting比较。取这个名字主要是因为喜欢看《星际之门》剧集,里面最喜欢的一个种族就是anc...2005-09-20 10:30:00 · 174 阅读 · 0 评论 -
为C++实现一个IDL (二)
说明:要看懂后面那部分代码,即使用Typelist的部分,最好预先看过《C++设计新思维》,英文版名为《Modern C++ Design》。If模板类在写完后想起来好像在哪见过,早晨去公司查阅了一下,在《产生式编程——方法、工具与应用》一书中有讲,英文名为《Generative Programming -- Methods, Tools, and Applications》基本和本篇中一个...2005-09-20 22:34:00 · 193 阅读 · 0 评论 -
为C++实现一个IDL (三)
一、修正错误。首先修正第二篇中的一些错误,错误的内容可见第二篇的评论。在Base类中,FUNC_TYPE需要所有的in/out类型,如果Method的模板参数——即函数类型参数——的返回值不是void,则把它装配成out参数,作为FUNC_TYPE函数类型的最后一个参数,这可以通过偏特化来实现。修改Method模板类,把所有类型包装成一个Typelist,直接传递给Base模板类,由Base...2005-09-21 20:34:00 · 131 阅读 · 0 评论 -
为C++实现一个IDL (四)
如《为C++实现一个IDL(三)》一文中所说,还剩最后一个问题,还是使用前面的测试代码说明。async_call函数的原型是:typedef void(*FUNC_TYPE)(int, char, string, short);void async_call (int v0, char v1, string v2, FUNC_TYPE func);这是模板类根据in/out来产生的。在异步...2005-09-22 19:13:00 · 163 阅读 · 0 评论 -
asgard项目遗留问题 (2005-09-27更新)
asgard项目已经准备了一段时间了,不过有些基本问题还需要考虑,也有一些是新发现的问题,以及自认为比较好的解决办法。通过第2、第4条的仔细研究,已经渐渐完善、明确了动态部分和静态部分的关系,使得Method包装类所完成的功能渐渐接近于一个函数,而元信息则脱离具体的对象提升到全局(当然还有些小问题没有解决)。1、参数名称的问题。为了与SOAP等基于XML的协议兼容,必须开始就把参数名称考虑在...2005-09-24 17:00:00 · 115 阅读 · 0 评论 -
C++实现简单的类型库
很久以前看到有人问“如何在C++中实现动态加载类”时,简单地做了一个。不过当时没有去考虑动态加载DLL的情况。今天在cpp@codingnow.com中也有人问到这个问题,就把它给做完了。当然只是简单地做到了“从全局类型库中,根据类名创建实例,支持动态DLL加载”,说得更明白点:在应用程序App1中,向全局类型库中注册一个类型"Test",在另一个隐式链接的DLL中(即App1一启动就加载的...2005-09-26 17:31:00 · 188 阅读 · 0 评论 -
为C++实现一个IDL (五)
本篇没什么清晰的目的,只是解释一下前面的几个问题,并提出一些新的目标。在“asgard项目遗留问题”中,我简单提到了几个问题,并且想了一些解决方案。其中,最首要解决的是第2条“服务对象的大小”和第5条“全局元信息”,这2条将影响到调用机制、call对象的生成。一个调用将生成一个call对象,由线程池来处理,同步调用将由异步调用来模拟。在call对象中,保存了所有in/out参数的包装对象。当...2005-09-28 22:57:00 · 351 阅读 · 0 评论 -
自己写的一个max函数
CSDN上看到有人问能否实现一个效率较高的max函数,效率接近于宏,于是自动动手写了一个。由于max宏在判断不同类型时,能够返回大的那个类型(表示范围大),所以只能使用模板来进行返回类型的推导。在VC8上打开O2或Ox优化选项,测试结果是与宏效率相等。全部实现如下:#include <typeinfo>#include <cassert>#include <w...2005-12-12 10:45:00 · 467 阅读 · 0 评论 -
Cilk++,XL
刚看到CSDN新闻:[url=http://news.csdn.net/a/20090804/212939.html]Intel获得Cilk++技术 多核处理器开发将变得更容易[/url],对它本身并不感兴趣,倒是类似在C++代码中插入自己的关键字来生成代码的方式比较喜欢,不过这种方式实现成本太高了,特别是C++中。以前还有一个[url=http://www.aspectc.org/]Aspect...原创 2009-08-05 10:04:55 · 163 阅读 · 0 评论