02 2015 档案
摘要:PS: 通过引入接收右值的函数形参,可以通过接收右值来实现高效PS在C++11中,标准库在中提供了一个有用的函数std::move,这个函数的名字具有迷惑性,因为实际上 std::move并不能移动任何东西,它唯一的功能是将一个左值强制转化为右值引用,继而我们可以通过右值引用使用该值,以用于移动语义...
阅读全文
摘要:PS: 在函数中,指针参数指定了restrict,表示这个指针指向的这段区域只能通过这个指针修改c99中新增加了一个类型定义,就是restrict。看了下网上的相关贴子,但还是问题解决的不够。下面是相关一个文章,我将在后面再加相关说明:那么restrict的意义是什么呢?概括的说,关键字restri...
阅读全文
摘要:概念TIME_WAIT: socket 仍然有数据在内核中待发送直到发送成功或超时,此socket不能被内核删除,同时等待是否要重传Ack对端还已发过来的FINLinger Time:socket关闭后,如果send buffer里仍有数据,内核删除socket的超时时间,一般2minSO_REUS...
阅读全文
摘要:http://blog.csdn.net/summerhust/article/details/18260117PS: 相对select来说,Poll的监听列表比select更短,并且Poll的监听列表的结果不需要手动重置,内核自动清revents,EPOLL更实现了异步通知 select用到了fd...
阅读全文
摘要:http://blog.chinaunix.net/uid-17299695-id-3059078.htmlPS:Select和Poll都是水平触发,epoll默认也是水平触发ET模式仅当状态发生变化的时候才获得通知,这里所谓的状态的变化并不包括缓冲区中还有未处理的数据,也就是说,如果要采用ET模式...
阅读全文
摘要:1. 查看内存分布 (gdb) info proc mappings2. 对于类的调试,先通过行号来设断点, 比如:(gdb) b TcpConnection.cc:633. 打印数组的内容 (gdb) p *array@len4. 查看全局变量的地址,比如info line 5. 使用十六进制逐个...
阅读全文
摘要:http://www.cnblogs.com/yvesliao/p/3938730.htmlPS: 使用单向依赖正在看google c++编程规范,里面对头文件依赖是这么说的:1234567891011使用前置声明(forward declarations)尽量减少.h文件中#include的数量。...
阅读全文
摘要:http://blog.sina.com.cn/s/blog_5ff2a8a201011ro8.htmlgcc/g++ 在执行编译时,需要4步 1.预处理,生成.i的文件[使用-E参数] 2.将预处理后的文件不转换成汇编语言,生成文件.s[使用-S参数] 3.有汇编变为目标代码(机器代码)生成...
阅读全文
摘要:http://www.cnblogs.com/Braveliu/archive/2013/08/27/3285908.html【1】什么是值语义?所谓值语义是指目标对象由源对象拷贝生成,且生成后与源对象完全无关,彼此独立存在,改变互不影响。就像 int 类型变量相互拷贝一样。C++的内置类型(boo...
阅读全文
摘要:http://www.wuzesheng.com/?p=1668条件变量(Condtion Variable)是在多线程程序中用来实现“等待->唤醒”逻辑常用的方法。举个简单的例子,应用程序A中包含两个线程t1和t2。t1需要在 bool变量test_cond为true时才能继续执行,而test_c...
阅读全文
摘要:1. Event Loop作为一个IO线程,通过IO复用来处理事件2. 为了保证线程安全,任何需要修改IO线程资源的工作都交给IO线程亲自来做3. 为了IO线程与其他线程互调,需要设计一个eventfd让其他线程把自己的请求通过socket告知IO线程4. 通过timerfd可以方便地把回调的tim...
阅读全文
摘要:http://blog.csdn.net/gdutliuyun827/article/details/8460417三种新的fd加入linux内核的的版本:signalfd:2.6.22timerfd:2.6.25eventfd:2.6.22三种fd的意义:signalfd:传统的处理信号的方式是注...
阅读全文
摘要:http://www.cnblogs.com/cobbliu/archive/2012/05/21/2512249.htmlPS:lower_bound of value 就是最后一个 value的位置lower_bound的意思是一段相等的序列的头(闭)和尾(开)的位置STL中关于二分查找的函数...
阅读全文
摘要:http://www.cnblogs.com/xkfz007/articles/2506022.html什么是临时对象? C++真正的临时对象是不可见的匿名对象,不会出现在你的源码中,但是程序在运行时确实生成了这样的对象.通常出现在以下两种情况:(1)为了使函数调用成功而进行隐式类型转换的时候。 传...
阅读全文
摘要:1. 二叉堆是完全二叉树,即它的N级子节点放慢之后才会去放N+1级子节点2. 二叉堆用数组实现,每个子节点通过固定的索引找到(由完全二叉树保证)3. 二叉堆排序只保证堆顶有效,即堆顶是最大值或最小值,是优先队列实现的不二选择4. 二叉堆删除节点,需要重新组织堆内结构,不太高效5. 二叉树,也叫二叉搜...
阅读全文
摘要:http://blog.csdn.net/shuimuniao/article/details/8017971将流水线引入cpu,可以提高cpu的效率。更简单的说,让cpu可以预先取出下一条指令,可以提供cpu的效率。如下图所示:+--------------------------------|取...
阅读全文
摘要:http://blog.csdn.net/liuxuejiang158blog/article/details/14100897__thread是GCC内置的线程局部存储设施,存取效率可以和全局变量相比。__thread变量每一个线程有一份独立实体,各个线程的值互不干扰。可以用来修饰那些带有全局性且...
阅读全文
摘要:1. 全局和类的静态变量成员在main之前构造和初始化,静态成员不能在类的内部构造初始化2. 类的普通成员依据在类内的定义顺序初始化,类的构造函数的初始化类表只能决定成员的构造函数,不能决定构造顺序3. 先构造基类再构造子类,先构造成员再构造自己4. 析构顺序相反,先析构自己再析构成员,先析构子类再...
阅读全文
摘要:http://hi.baidu.com/cpuramdisk/item/7c2f8d77385e0f29d7a89cf0shared_from_this()是enable_shared_from_this的成员 函数,返回shared_ptr。首先需要注意的是,这个函数仅在shared_ptr的构造...
阅读全文
摘要:http://www.cnblogs.com/TianFang/archive/2013/02/05/2892503.html很多时候,我们需要在内存中记录最近一段时间的数据,如操作记录等。由于这部分数据记录在内存中,因此并不能无限递增,一般有容量限制,超过后就将最开始的数据移除掉。在stl中并没有...
阅读全文
摘要:Strategy 策略模式1. 将算法和对象分离,对象中包含算法的函数function或抽象类2. 降低了对象的封装性,可能需要算法能访问对象类的更多资源3. 使用tr1::function可以使用任何兼容的调用物,加上tr1:bind则可以绑定其他需要的对象创建型模式a. Prototype 原型...
阅读全文
摘要:http://www.cnblogs.com/Ripper-Y/archive/2012/05/15/2501930.htmlhttp://blog.csdn.net/haoel/article/details/1948051/多态性可分为两类:静态多态和动态多态。函数重载和运算符重载实现的多态属于...
阅读全文
摘要:http://blog.csdn.net/onlyou930/article/details/6725051说来惭愧,写C++有一段时间了。这个问题从来没有认真考虑过,此次标记于此:考虑如下问题:1 char a[20];2 int *ptr = (int *)a;3 ptr++;第3句ptr++实...
阅读全文
摘要:http://c.biancheng.net/cpp/html/477.html多维数组与多级指针也是初学者感觉迷糊的一个地方。超过二维的数组和超过二级的指针其实并不多用。如果能弄明白二维数组与二级指针,那二维以上的也不是什么问题了。所以本节重点讨论二维数组与二级指针。 一、二维数组1、假想中的二维...
阅读全文
摘要:1. shared_ptr是要程序管理的对象,这个对象管理了它引用的另一个对象2. shared_ptr销毁的时候,把它引用的对象的引用数减一,这个是强引用3. weak_ptr可以认为是普通指针,它不管理它引用的对象的内存左边的小方块是智能指针对象,右边P对象拥有一个引用C的智能指针,C要能P销毁...
阅读全文
摘要:http://blog.csdn.net/liuzhi1218/article/details/6993135循环引用: 引用计数是一种便利的内存管理机制,但它有一个很大的缺点,那就是不能管理循环引用的对象。一个简单的例子如下:#include#include #include #include c...
阅读全文
摘要:1. 多态一般用在需要把一些对象放在容器中,但是容器中又只能用基类的指针2. 通过继承的方式实现多态,通过基类指针在运行时决定动态类型,这种方式耦合度比较高2. 通过在继承类中使用模板,将具体类作为模板参数,具体类不需要继承任何基类,这个继承类指针依然可以放到容器中3. 具体类对象以成员形式保存在继...
阅读全文
摘要:1. 每个消息头部中带上type name,作为消息的类型标识2. 通过type name可以找到描述符Descriptor*, FindMessageTypeByName3. 通过描述符Descriptor*,创建一个对应type name的对象,再用消息的payload去初始化这个消息对象4. ...
阅读全文
摘要:http://www.cnblogs.com/catch/p/3251937.htmlC++中的临时变量指的是那些由编译器根据需要在栈上产生的,没有名字的变量。主要的用途主要有两类:1) 函数的返回值, 如: 1 string proc() 2 3 { 4 5 return string...
阅读全文
摘要:1. 赋值操作时把右操作数隐式转化为左操作数2. 通过普通单参数构造函数把其他类型的对象隐式转换为我们的类类型3. 通过转换函数operator type()这种成员函数可以把类类型转成其他类型,这样可以省略重载操作符
阅读全文
摘要:http://blog.csdn.net/zengraoli/article/details/9663057STL和Boost中的算法和函数大量使用了函数对象作为判断式或谓词参数,而这些参数都是传值语义,算法或函数在内部保修函数对象的拷贝并使用,例如:#include"stdafx.h"#inclu...
阅读全文
摘要:1. boost:bind获得一个函数对象,就像函数指针一样,这个行为可以作为回调2. bosot:bind的函数对象可以保存别的对象的引用,回调对象的成员函数3. boost:function是一个函数的泛化,可以对回调函数的进行对象化保存,比如放在容器中,比如保存在类里
阅读全文
摘要:http://blog.csdn.net/benny5609/article/details/2324474要开始使用 Boost.Function, 就要包含头文件 "boost/function.hpp", 或者某个带数字的版本,从 "boost/function/function0.hpp" ...
阅读全文
摘要:http://kelvinh.github.io/blog/2013/12/03/boost-bind-illustrated/其实这是很久之前留的一个坑了,一直没有填。。记得在刚开始看到 boost::bind 的使用的时候,我整个人都惊呆了:天哪,C++还能这样!!于是去google搜索其原理,...
阅读全文
摘要:http://git-scm.com/book/zh/v1/Git-%E5%88%86%E6%94%AF-%E5%88%86%E6%94%AF%E7%9A%84%E6%96%B0%E5%BB%BA%E4%B8%8E%E5%90%88%E5%B9%B6分支的新建与合并现在让我们来看一个简单的分支与合并...
阅读全文
摘要:http://blog.sina.com.cn/s/blog_6f5b220601013zw3.html非常好的原子操作,不用加锁:__sync_fetch_and_addGCC 提供的原子操作gcc从4.1.2提供了__sync_*系列的built-in函数,用于提供加减和逻辑运算的原子操作。其声...
阅读全文
摘要:http://www.cnblogs.com/tianfang/archive/2008/09/15/1291050.htmlboost::scoped_ptr和std::auto_ptr非常类似,是一个简单的智能指针,它能够保证在离开作用域后对象被自动释放。下列代码演示了该指针的基本应用:#inc...
阅读全文
摘要:PS:1. 断点C++类函数,用b 命名空间::类名::方法名 2. 编译参数一定要加-g,才可断点调试http://www.cnblogs.com/xd502djj/archive/2012/08/30/2663960.htmllinux下的c/c++调试器gdbgdbLinux 包含了一个叫 g...
阅读全文