11 2009 档案

摘要:<Design and Evaluation of Benchmarks for Financial Applications using Advanced Message Queuing Protocol (AMQP) over InfiniBand>Hari Subramoni, Gregory Marsh, Sundeep Narravula, Ping Lai, and Dha... 阅读全文
posted @ 2009-11-11 05:41 史莱姆 阅读(598) 评论(0) 推荐(0)
摘要:文本内容是节选自Choosing Middleware: Why Performance and Scalability do (and do not) Matterby Michi Henning, Chief Scientist, ZeroC, Inc.文章的作者也是<基于C++ CORBA高级编程(Advanced CORBA(R) Programming with C++)>的... 阅读全文
posted @ 2009-11-11 02:56 史莱姆 阅读(1077) 评论(0) 推荐(0)
摘要:http://www.glenmccl.com/perf_006.htmIs stream I/O slower than C-style standard I/O? This question is a bit hard to answer. For a simple case like: #ifdef CPPIO #include <iostream.h> #else #incl... 阅读全文
posted @ 2009-11-11 01:17 史莱姆 阅读(380) 评论(0) 推荐(0)
摘要:原文 http://www.tommti-systems.de/go.html?http://www.tommti-systems.de/main-Dateien/reviews/languages/benchmarks.html很古老的一篇文章,但是结果很有启发性, 指出了几种语言性能差别到底在什么地方, 不过测试版本都比较老, 所以只节选了前面一段。测试环境AMD Athlon XP 2200... 阅读全文
posted @ 2009-11-11 00:28 史莱姆 阅读(5686) 评论(1) 推荐(0)
摘要:Sessions建立在不同容器中的两个节点的链接必须要创建session. session是被具名的两个容器间的交互,并且为交互提供了一对可靠的有序地命令通道(正向和反向)。在同一时间的任意两个容器间可能会存在多个session, 每个session可能有多个链接。Commandssession是命令通道。命令是AMQP的工作的原子单位。命令用于创建在不同容器的源节点和目的节点之间的链接,传输信息... 阅读全文
posted @ 2009-11-10 02:10 史莱姆 阅读(517) 评论(0) 推荐(0)
摘要:Nodes and Links一个AMQP的网络包括节点和链接。一个节点是一个具名的的消息源和/或消息终点。消息由源节点(生产者)创建,并可能沿链接通过其他节点,直到达到终止节点(消费者)。链接是指沿节点之间的信息可能单向传递路线。链接生命周期是与源节点和目标节点的生命周期联系在一起的。如果两端的任何一个节点被删除,链接也会被删除。链接可能是“destructive”,或&... 阅读全文
posted @ 2009-11-10 01:24 史莱姆 阅读(701) 评论(0) 推荐(0)
摘要:http://qpid.apache.org/index.html 我的运行环境 windows 7 x641. 安装并运行c++ broker Windows installer1) 下载 C++ broker windows installerhttp://www.apache.org/dist/qpid/0.5-windows/qpidc-0.5.msi2) 创建目录: C:\TEMP\3)... 阅读全文
posted @ 2009-11-09 10:12 史莱姆 阅读(2862) 评论(1) 推荐(0)
摘要:The Advanced Message Queuing Protocol (AMQP)是一个标准开放的应用层的消息中间件(Message Oriented Middleware)协议。AMQP定义了通过网络发送的字节流的数据格式。因此兼容性非常好,任何实现AMQP协议的程序都可以和与AMQP协议兼容的其他程序交互,可以很容易做到跨语言,跨平台。DevelopmentAMQP由JPMorgan C... 阅读全文
posted @ 2009-11-09 06:22 史莱姆 阅读(2098) 评论(4) 推荐(0)
摘要:1. 什么是中间件?中间件(middleware)是一种独立的系统软件或服务程序, 它在操作系统、网络和数据库之上,应用软件的下层,总的作用是为处于自己上层的应用软件提供运行与开发的环境,帮助用户灵活、高效地开发和集成复杂的应用软件.2. 为什么使用中间件?具体地说,中间件屏蔽了底层操作系统的复杂性,使程序开发人员面对一个简单而统一的开发环境,减少程序设计的复杂性,将注意力集中在自己的业务上,不必... 阅读全文
posted @ 2009-11-09 05:02 史莱姆 阅读(595) 评论(0) 推荐(1)
摘要:find (find_if) 搜索等于某值的第一个元素 adjacent_find 搜索连续两个相等的元素 find_first_of 搜索等于某个数值之一的第一个元素 find_end 搜索某个子区间最后出现的位置 search 搜索某个子区间第一次出现的位置 search_n 搜索具有某个特性的第一段n个连续元素 binary_search 判断某个区间内是否包含某个元素 ... 阅读全文
posted @ 2009-11-09 03:03 史莱姆 阅读(359) 评论(0) 推荐(0)
摘要:构造函数1)initialization list2)异常保护,资源泄漏检查3)this指针的使用4)其他构造函数调用5)虚函数调用6)拷贝构造函数7)隐式类型转换 析构函数1)异常保护2)虚函数调用 成员变量1)compiler - firewall idiom2)访问权限3)traits4)资源管理与智能指针5)引用计数与Copy-On-Write6)const / mutable / vol... 阅读全文
posted @ 2009-11-09 02:59 史莱姆 阅读(185) 评论(0) 推荐(0)
摘要:返回值如何实现? 【实现模型1】cfont的实现采用了双阶段转化。1.首先声明一个额外的参数,类型上类对象的引用,用来存放返回结果。2.对这个参数利用返回值进行拷贝初始化。过程类似于参数传递,也是要定义一个临时对象,用来保存返回值,然后在函数内部调用拷贝构造函数用那个return值进行初始化。 X bar() { X xx; // process xx ... return xx; } 编译器转化... 阅读全文
posted @ 2009-11-09 02:58 史莱姆 阅读(407) 评论(0) 推荐(0)
摘要:Copy-On-Write 使用了“引用计数” 如果使用拷贝构造和operator=初始化对象, 则该对象只是简单增加引用计数, 而在当前类对象改变时, 他会去查看引用计数, 如果有其他类对象共享使用当前的对象, 那么把需要更改的类进行拷贝。 阅读全文
posted @ 2009-11-09 02:58 史莱姆 阅读(181) 评论(0) 推荐(0)
摘要:1)纯虚析构函数,如果不提供定义, 子类不能被实例化。 2)明确使用缺省行为 3)提供部分行为 4)应付功能不足的编译器诊断程序 阅读全文
posted @ 2009-11-09 02:57 史莱姆 阅读(328) 评论(0) 推荐(0)
摘要:标准形式 T& operator++(); // ++ 前缀T& operator --(); // -- 前缀const T operator++(int); // ++ 后缀const T operator--(int); // -- 后缀// l 是 list<int>, i 是合法的迭代器 1)l.erase(i++); OK 2)l.erase(i)... 阅读全文
posted @ 2009-11-09 02:57 史莱姆 阅读(228) 评论(0) 推荐(0)
摘要:1)在函数调用之前,对函数的所有参数的求值必须全部完成 2)一旦一个函数开始执行, 调用者函数中的表达式将不会开始求值,或继续求值,直至被调用函数执行结束,函数执行永远不会交叉进行. 3)如果函数参数是表达式,这些表达式通常可以按任何次序求值,包括交叉求值. 对于f(expr1, expr2) 编译器可能先对expr1 求值,也可能后对expr1求值,或者让expr1 和 expr2 的求值交叉进... 阅读全文
posted @ 2009-11-09 02:56 史莱姆 阅读(314) 评论(0) 推荐(0)
摘要:贪婪匹配 原则是说, 编译器在将源码中的字符解析成一个个标记时,会使用一种贪婪匹配算法, 也就是说尽可能让一个标记包含更多的字符 a---b; 阅读全文
posted @ 2009-11-09 02:55 史莱姆 阅读(160) 评论(0) 推荐(0)
摘要:具有non-trivial的构造函数,拷贝构造函数, 析构函数和重载赋值操作符的类对象和数组不可以作为union的成员 阅读全文
posted @ 2009-11-09 02:55 史莱姆 阅读(266) 评论(0) 推荐(0)
摘要:1)所有虚基类子对象会按照深度优先,从左到右的顺序进行初始化 2)直接基类子对象按照他们在类定义中的声明的顺序被构造起来 3)非静态成员子对象按照他们在类定义体中声明的顺序被构造起来 4)构造函数体被执行 class B1{};class V1: public B1{};class D1: virtual public V1{}; class B2{};class B3{};class V2: p... 阅读全文
posted @ 2009-11-09 02:54 史莱姆 阅读(266) 评论(0) 推荐(0)
摘要:1. private的可见性: 私有成员对于任何能够看到其所属类定义的代码来说都是可见的。他会参与名字查找和重载决议, 因而可能使调用变得无效或具有二义性, 即使它本身可能永远不会被调用。 2. private的可访问性: 具有对某个成员的访问权的代码可以通过泄露该成员的指针的方式将其访问权限授予其他任何代码。 成员的名字只对其所属类的其他成员或者友元来说是可访问的, 而这里的其他成员也... 阅读全文
posted @ 2009-11-09 02:54 史莱姆 阅读(487) 评论(0) 推荐(0)
摘要:1. C++标准规定,函数模板不能偏特化2. 函数模板的特化并不参与重载决议非模板函数是C++的一等公民如果编译器没有发现合适的一等公民, 那么主函数模板作为C++中的二等公民被纳入考虑如果还不能选出唯一的主函数模板,编译器会根据一组相当晦涩的规则确定出那个主函数模板是最特化的函数模板特化并不参与重载决议.只有在某个主模板被重载的决议前提下,其特化版本才有可能被使用.而且编译器在选择住模板的时候并... 阅读全文
posted @ 2009-11-09 02:53 史莱姆 阅读(725) 评论(0) 推荐(1)
摘要:1. 特化friend class template<class T> class Node;template<class T>class Tree{friend class Node<T>;} 2. 特化friend function1) 如果函数名前面没有::,就绝对不会引用某个template实体2) 如果函数名前面含有::,编译器会优先匹配常规non-t... 阅读全文
posted @ 2009-11-09 02:53 史莱姆 阅读(151) 评论(0) 推荐(0)
摘要:私有继承是组合的一种语法上的变形(聚合或者 “有一个”) 例如,“汽车有一个(has-a)引擎”关系可以用单一组合表示为: class Engine {public: Engine(int numCylinders); void start(); // Starts this Engine};class Car {public: Car()... 阅读全文
posted @ 2009-11-09 02:49 史莱姆 阅读(594) 评论(0) 推荐(0)
摘要:&*iter的用法 指向数组内元素的指针永远都是迭代器, 迭代器并非总是指针.所有符合标准的迭代器都要求提供operator*(),而且该操作符必须返回一个真正的T&。&*iter将迭代器转型为指针 &*iter, 先将迭代器解引用,获得容器内对象的直接引用,然后获取它的地址。 阅读全文
posted @ 2009-11-09 02:49 史莱姆 阅读(527) 评论(0) 推荐(0)
摘要:万不得已时才使用“placement new”语法。只有当你真的在意对象在内存中的特定位置时才使用它。例如,你的硬件有一个内存映象的 I/O计时器设备,并且你想放置一个Clock对象在那个内存位置。 阅读全文
posted @ 2009-11-09 02:48 史莱姆 阅读(198) 评论(0) 推荐(0)
摘要:当一个查看函数和一个变更函数名字相同,且参数个数与类型也相同时就有用了——即两者的不同之处仅在于一个有const另一个没有const。 const重载的一个常见应用是下标运算符。通常应该尽量使用标准模板容器,例如std::vector,但有时会需要在自己的类中支持下标运算符。一个经验法则是:下标运算符通常成对出现。 class Fred { ... };class MyFr... 阅读全文
posted @ 2009-11-09 02:48 史莱姆 阅读(345) 评论(0) 推荐(0)
摘要:static initialization order fiasco是对C++的一个非常微妙的并且常见的误解。不幸的是,错误发生在main()开始之前,很难检测到。 简而言之,假设你有存在于不同的源文件x.cpp 和y.cpp的两个静态对象x 和 y。再假定y对象的构造函数会调用x对象的某些方法。 就是这些。就这么简单。 结局是你完蛋不完蛋的机会是50%-50%。如果碰巧x.cpp的编辑单元先被初... 阅读全文
posted @ 2009-11-09 02:47 史莱姆 阅读(710) 评论(0) 推荐(0)
摘要:与构造函数反序:先被构造的,后被析构。 以下的例子中,析构的顺序是a[9], a[8], ..., a[1], a[0]: void userCode(){ Fred a[10]; // ...} 阅读全文
posted @ 2009-11-09 02:47 史莱姆 阅读(335) 评论(0) 推荐(0)
摘要:1. operatoroperator op= 直接作用于lvalue 并传回reference, 而 operator op 必须传回一个临时对象。如果你提供某个op 的标准版本 operator op, 同时请为他提供一份 assignment 版本 operator op=, 并且用后者为基础来实现前者, 同时也请保存 op 和 op= 之间的自然关系。使用以下准则来决定一个运算符是否为me... 阅读全文
posted @ 2009-11-09 02:45 史莱姆 阅读(174) 评论(0) 推荐(0)
摘要:1. 内存区域常量数据区const data, 编译期间就能确定的值, 在程序的整个生存期内, 区域中的数据都是可用并且只读。栈区stack 自动变量, 局部变量自由存储区free store和堆heap全局/静态区global/static,全局的或静态的变量和对象所占用的存储区域在程序启动的时候才被分配,而且直到程序开始执行的时候才被初始化。2. new如果你为某个类提供了任何类相关的new,... 阅读全文
posted @ 2009-11-09 02:42 史莱姆 阅读(189) 评论(0) 推荐(0)
摘要:1. virtual destructor让base class 的 destructor 为 virtual, 除非你确定不会有人企图通过一个pointer to base 去删除一个derived object。基类的析构函数要么是虚拟共有函数,要么是非虚拟的保护函数2. 绝不要改写虚函数的预设参数3. 尽量避免使用public 虚函数, 尽量以template method 取代之4. co... 阅读全文
posted @ 2009-11-09 02:41 史莱姆 阅读(344) 评论(0) 推荐(0)
摘要:1. Standard Exception Classes 1)Exceptions for language supportbad_allocbad_castbad_typeidbad_exception 2)Exceptions for the C++ standard library(logic_error)invalid_argumentlength_errorout_of_rangedo... 阅读全文
posted @ 2009-11-09 02:37 史莱姆 阅读(255) 评论(0) 推荐(0)
摘要:1. auto_ptrs1)auto_ptrs cannot share ownership2)auto_ptrs are not provided for arrays(auto_ptr 使用operator delete 语义,尽量使用vector 代替数组)3)auto_ptrs don't meet the requirements for container elements const... 阅读全文
posted @ 2009-11-09 02:34 史莱姆 阅读(239) 评论(0) 推荐(0)
摘要:Effective C++: 55 Specific Ways to Improve Your Programs and Designs (3rd Edition)More Effective C++: 35 New Ways to Improve Your Programs and DesignsEffective STL: 50 Specific Ways to Improve Your Us... 阅读全文
posted @ 2009-11-09 02:28 史莱姆 阅读(197) 评论(0) 推荐(0)