随笔分类 -  C/C++ 技术积淀

C/C++ 技术积淀
摘要:高性能分布式计算与存储系统设计概要(下篇) (上篇) 在上篇里,我们主要讨论了,这个系统怎样处理大数据的“读”操作,当然还有一些细节没有讲述。下篇,我们将主要讲述,“写”操作是如何被处理的。我们都知道,如果只有“读”,那几乎是不用做任何数据同步的,也不会有并发安全问题,之所以,会产生这样那样的问题, 阅读全文
posted @ 2012-12-29 00:02 Jone Zhang 阅读(10035) 评论(48) 推荐(35) 编辑
摘要:高性能分布式计算与存储系统设计概要(上篇) 2012年底,末日之后,看到大家都在写年末总结,我也忍不住想一试。工作已经3年半了,头一次写总结。虽然到现在仍是无名小码农一名,但工作这些年,技术着实有不少积累。成长最大的,当然就是这篇文章标题提到的——高性能分布式计算与存储系统的设计和研发过程,这也是我 阅读全文
posted @ 2012-12-28 00:38 Jone Zhang 阅读(14124) 评论(46) 推荐(32) 编辑
摘要:Performanced C++ 经验规则===========================================================================================前言: Performanced C++,意为“高性能C++“编程,是笔者和所在团队多年C++编程总结的经验规则,按条款方式讲述(参考了《Effective C++》的方式),希望能对初入C++的程序员提供帮助,少走弯路,站在前人的肩膀上,看得更高走的更远。我们也同样是脚踩许许多多大牛的经典著作,还有无数默默付出的程序员的辛劳,以及自己许许多多惨痛的编程体验,才有了这些.. 阅读全文
posted @ 2012-12-27 21:38 Jone Zhang 阅读(2160) 评论(0) 推荐(2) 编辑
摘要:第五条:再谈重载、覆盖和隐藏在C++中,无论在类作用域内还是外,两个(或多个)同名的函数,可能且仅可能是以下三种关系:重载(Overload)、覆盖(Override)和隐藏(Hide),因为同名,区分这些关系则是根据参数是否相同、是否带有const成员函数性质、是否有virtual关键字修饰以及是否在同一作用域来判断。在第四条中,我们曾提到了一些关于重载、覆盖的概念,但只是一带而过,也没有提到隐藏,这一篇我们将详细讨论。1、首先说的是重载,有一个前提必须要弄清楚的是,如果不在类作用域内进行讨论,两个(或多个)同名函数之间的关系只可能是重载或隐藏,这里先说重载。考虑以下事实:1 int foo 阅读全文
posted @ 2012-12-26 17:09 Jone Zhang 阅读(2216) 评论(4) 推荐(4) 编辑
摘要:第四条:静态和多态,亦敌亦友这一篇,我们讨论C++中静态和多态的关系。我们都知道,C++并不是一门“动态”语言,虽然它提供了同样强大于其它动态语言的多态性,但很多时候,我们之所以选择C++,看重中正是其“静态”所带来的High Performance。所谓静态,通常是指,在程序运行的过程,是“静止”不变,固定的(特别是内存地址),当然“多态”就是与之对立的概念。这一篇我们并不讨论静态(成员)变量或静态(成员)函数有什么作用,而是讨论“静态”的行为,对比“多态”。我们这里所说的静态,是指:compiler time,即编译时绑定、早绑定、静态联编;而“多态”就是真正的runtime绑定、晚绑定、 阅读全文
posted @ 2012-12-25 17:45 Jone Zhang 阅读(1978) 评论(1) 推荐(2) 编辑
摘要:第三条:你不知道的构造函数(下)前面两篇,我们已经讨论了C++构造函数中诸多细枝末节,但百密一疏,还有一些地方我们没有考虑到。这一篇将对这些问题进行完结。7、构造函数中的异常当你在构造函数中写代码的时候,你有没有想过,如果构造函数中出现异常(别告诉我,你不抛异常。“必要”时系统会替你抛的),那会出现怎样的情况?对象还能构建完成吗?构造函数中已经执行的代码产生的负面效应(如动态分配内存)如何解决?对象退出其作用域时,其析构函数能被调用吗?上述这些问题,正是构造函数中产生异常要面临的问题。让我们先看结论,再分析过程:尽可能不要在构造函数中产生(抛出)异常,否则,一定会产生问题。我们先看一段代码: 阅读全文
posted @ 2012-12-24 14:38 Jone Zhang 阅读(2343) 评论(5) 推荐(0) 编辑
摘要:第二条:你不知道的构造函数(中)上一篇你不知道的构造函数(上)主要讲述了,C++构造函数在进入构造函数体之前,你可能不知道的一些细节。这一篇将讲述,进入构造函数体后,又发生了什么。4、虚表初始化上一篇曾提到,如果一个类有虚函数,那么虚表的初始化工作,无论构造函数是你定义的还是由编译器产生的,这部分工作都将由编译器隐式“合成”到构造函数中,以表示其良苦用心。上一篇还提到,这部分工作,在“刚”进入构造函数的时候,就开始了,之后,编译器才会理会,你构造函数体的第一行代码。这一点,通过反汇编,我们已经看的非常清楚。虚表初始化的主要内容是:将虚表指针置于对象的首4字节;用该类的虚函数实际地址替换虚表中该 阅读全文
posted @ 2012-12-23 19:00 Jone Zhang 阅读(2771) 评论(1) 推荐(1) 编辑
摘要:Performanced C++ 经验规则前言:Performanced C++,意为“高性能C++“编程,是笔者和所在团队多年C++编程总结的经验规则,按条款方式讲述(参考了《Effective C++》的方式),希望能对初入C++的程序员提供帮助,少走弯路,站在前人的肩膀上,看得更高走的更远。我们也同样是脚踩许许多多大牛的经典著作,还有无数默默付出的程序员的辛劳,以及自己许许多多惨痛的编程体验,才有了这些“规则”。icc(JoneZhang,张峻崇)原创内容,难免有错误,欢迎拍砖指正,共同进步。转载请注明出处,保留追究一切责任的权利。============================ 阅读全文
posted @ 2012-12-23 16:16 Jone Zhang 阅读(5099) 评论(3) 推荐(2) 编辑
摘要:废话不多说,常用的代码积淀下来。一、懒汉模式:即第一次调用该类实例的时候才产生一个新的该类实例,并在以后仅返回此实例。需要用锁,来保证其线程安全性:原因:多个线程可能进入判断是否已经存在实例的if语句,从而non thread safety.使用double-check来保证thread safety.但是如果处理大量数据时,该锁才成为严重的性能瓶颈。1、静态成员实例的懒汉模式: 1 class Singleton 2 { 3 private: 4 static Singleton* m_instance; 5 Singleton(){} 6 public: 7 sta... 阅读全文
posted @ 2012-12-19 18:38 Jone Zhang 阅读(42949) 评论(8) 推荐(7) 编辑