摘要:future/promise future提供了一个基于数据(future模板类型)的异步概念:对于一个类型T,可以在以后通过get接口获得这个类型T的变量。或者打个不太恰当的比方,当你获得一个future对象时,就获得了一个消费券(consumer):拿着这张券可以兑换(get)一个T类型的结果(
阅读全文
摘要:一、问题的原因 也不知道是更新gcc版本的原因,还是由于代码修改包含了特殊头文件,导致在新的环境中YouCompleteMe插件(以后简称为ycm)无法进行智能提示,即使对于最简单基础的vector等容器也识别错误,这个对于这么一个杀手级的应用来说就太不应该了。关键是这样就导致整个开发环境的使用就很
阅读全文
摘要:一、问题的背景 在某些情况下,我们希望对C中的特定函数执行时间进行统计,当然比较简单的方法就是在这个需要进行profile的函数添加一个函数局部变量,并在构造和析构函数的时候的时间差来作为整个函数的执行时间。如果这种需要统计的函数比较多,那么这种手动添加起来就比较麻烦,此时就考虑到了gcc编译器提供
阅读全文
摘要:一、reference forwarding(引用转发)gcc实现及C++标准的规定 gcc-4.8.2\gcc\cp\pt.c/* Adjust types before performing type deduction, as described in [temp.deduct.call] a
阅读全文
摘要:一、了解该规范的作用 在看C/C++文件对应的反汇编代码中,比较关键的就是找到函数的传入参数,而这个本身并没有神秘之处,完全是ABI已经明确规定过的。这里再次整理下,方便之后查阅。 二、文档 一个比较全的文档 《System V Application Binary Interface AMD64
阅读全文
摘要:一、std::tr1::bind及std::tr1::function函数的意义 在第一次见到std库中bind函数的时候,有一种你们城里人真会玩的感觉,把模版用的出神入化。但是,更关键的是这么华丽的用法,是为了解决什么问题呢?这个问题本身可能比它们如何实现更加重要。其实科技的发展也是大抵如此,往往
阅读全文
摘要:一、问题 在常规的函数调用中,通常是直接看到函数的定义并调用该函数,所以,函数调用传递的是值还是引用是根据函数声明来决定的。但是,在std::tr1中的bind函数本身是为了完成不同格式参数的适配,所以函数调用处看到的内容和真正的函数执行位置看到的内容并不相同。 简单的说,这里可以简单的模拟下bin
阅读全文
摘要:一、静态局部变量初始化是否会很耗 之前曾经注意到过,gcc对静态变量的运行时初始化是考虑到多线程安全的,也就是说对于工程中大量使用的单间对象: CSingletone::Instance类型的代码,理论上说都是要经过mutex这种重量级的互斥检测,如此看来,这种单间对象对系统损耗应该是非常大的,因为
阅读全文