C++
文章平均质量分 61
arrow_pig
这个作者很懒,什么都没留下…
展开
-
-Weffc++
读书的时候,读Effective C++,当时还打趣的说,世界上的C++程序员分为两种,看过Effective C++的,和没有看过的。最近才注意到,gcc的 -Weffc++编译选项能警告我们,如果代码没有遵循Effective C++的编码规范。 最近我们就发现一个: struct uncopyable { uncopyable() {} private: uncopyable(uncopyable const&); }; struct A原创 2011-01-07 17:34:00 · 2033 阅读 · 1 评论 -
Timer的C++实现
<br /> <br /> <br />要求:<br /><br />在HTTP服务器上实现一个不需要精确定时的Timer,该Timer本质上是一堆时间事件的管理类,每个时间事件都绑定一个事件回调函数,可以scedule在某个时间点开始运行,运行一次或者以固定时间间隔反复执行。Timer的使用者可以以代码方式加载或者撤销指定的时间事件。 <br />设计这个Timer的原因,因为一个HTTP服务器上加载了诸多服务,我们需要定时收集,统计系统MEMORY,CPU, LOCK,QPS, LATENC原创 2011-01-07 17:38:00 · 5377 阅读 · 0 评论 -
const char* const 问题
<br />这是很经典的问题,很多C语言的初级面试都会碰到。今天在这里重提是因为我以前一直没有真正理解,我是死记得: <br />const char* p: p指向的内容是常量,但是p是常量指针<br />char* const p: p指向的内容是变量,但是p是指针常量<br />因为我没有真正理解,所以稍微一变化我就傻了:<br />template <class T><br />void getStrT(const T& val) {…} //<br />void getSt原创 2011-01-07 17:39:00 · 871 阅读 · 0 评论 -
Typename in C++ Template
<br />今天调一个程序,里面用到了vector,在GDB里面看vector里面的东西一点也不直接,如果碰到vector<vector<int> >,要想看看里面的内容就更不爽了。也可能是我不知道有什么好办法,如果谁知道,麻烦告诉我一下。 <br />没有办法,只要弄个Dump函数来看: <br />template <class T><br />void DumpArrayArray(vector<vector<T> >& arr)<br />{<br /> cout<< "D原创 2011-01-07 17:40:00 · 570 阅读 · 0 评论 -
C++异常处理的三个境界
2005年5月份,我转正后1个月,组里组织我们到青岛旅游,那个时候我正在看Exceptional C++这本书,有一个章节一直看不懂,就打印了带到青岛去了,嘿嘿,旅游还是有助于激发灵感的,在旅馆里我终于看懂了,回来以后总结了一个PPT。这个PPT很有特点,因为我做了一个Q版。时光飞逝阿,转眼2年多过了,房价又涨了好多,本来可以买两室两厅的钱只够一室一厅了。特重写C++异常处理献给我们可爱的房地产开发商. Exception-Safety Issues and Techniques<br />预练武功,先原创 2011-01-07 17:41:00 · 1068 阅读 · 0 评论 -
内存分配(4)–LOKI的小物件分配器
<br /> 今天我们来看看Loki的内存分配.有一本书叫做<Mordern C++ Design>,个人认为是一本非常不错的书,值得一读。Loki的内存分配目的很明确,loki的设计者认为当前的C运行库的内存分配函数(malloc/realloc/free)并没有针对小内存分配做过优化,导致在有大量小内存频繁分配释放的环境下性能很差,所以他要解决这个问题,这一点倒是和C++ STL很相似,只不过loki的设计者更露骨,他在给分配器起名字的时候也充分强调了loki的内存分配是针对小物件做了大量工作的原创 2011-01-07 17:52:00 · 1470 阅读 · 1 评论 -
内存分配(1) — 空闲链表
Posted on六月 29, 2007byarrowpig1979内存分配是所有成功的库都要费大量心力去做好的事情,除非是对performance很高的需求,至少我现在在工作中很少需要自己来写内存分配策略。我始终觉得一些经典的库,像STL,Loki,Boost是最好的教材。读书也要讲究方法,读STL这样的库,我现在会逼着自己多问几个为什么,为什么作者要这样设计呢,如果换作我自己,我会怎样设计呢,有什么地方没有考虑周全呢。今天我试图来说说内存分配,希望大家多发表意见。交流才能进步嘛-:)我们经常会写 CMy原创 2011-01-07 17:50:00 · 2035 阅读 · 0 评论 -
内存分配(2)–embedded pointer
到现在看来,简单的空闲链表的主要开销就是一个next指针域,在32位系统上是4个字节。可是如果我们的CMyObject本来就很小,只有4个字节,那额外开销可就是100%阿,如果系统中用到几万,十几万,甚至上百万个CMyObject,就不容小视了!<br />我们仔细来分析一下刚才的例子,什么时候会用到next指针呢?<br />1. 第一次分配对象,建立整个freeStore的链表的时候,初始化各个实例的next指针<br />2. 每次给申请者一个实例时,要修改freeStore =原创 2011-01-07 17:51:00 · 1600 阅读 · 0 评论 -
内存分配(3)–SGI STL的内存分配器
Posted on六月 30, 2007byarrowpig1979我在这里枉自揣测一下SGI版本的STL在内存分配时的意图吧,SGI的内存分配器一共有两级,二级分配器用于分配小于等于128字节的内存块,如果申请的内存区块大于128字节,就自动使用一级分配器分配。所以说真正问系统要内存资源的动作全部通过一级分配器,一级分配器是malloc的一个封装,并且强调了在系统内存资源耗尽的时候的处理。记得在Effective C++里面有对内存耗尽时的讨论。那为什么要设计一个二级分配器呢,我想设计者主要有以下几个原创 2011-01-07 17:51:00 · 1163 阅读 · 2 评论