自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(20)
  • 收藏
  • 关注

转载 一个基于C++11的单例模板类

1 #ifndef _SINGLETON_H_ 2 #define _SINGLETON_H_ 3 4 #include <mutex> 5 #include <memory> 6 7 template<typename T> 8 class Singleton { 9 public:10 templa...

2018-08-16 06:17:00 224

转载 宏与内联的区别

C/C++编译过程主要分为4个过程 编译预处理 编译、优化阶段 汇编过程 链接程序 宏是在预处理阶段由预处理器直接替换的,处理的是token,会将所有的name用token string代替,得到的结果仍然是程序文本。而内联函数是在编译期完成展开的,其代码将直接嵌入到汇编程序的文本段。 转载于:https://www...

2016-10-19 13:48:00 129

转载 C++中哪些函数不能声明为inline?

inline关键字仅仅是对编译器的建议,编译器有权力决定一个函数是否在调用处嵌入。因为内联函数要在调用处展开,编译器必须能在每一个调用处能看到该函数的定义,因此最好将函数实现放在头文件中(而且实现在类定义中的成员函数即便不加inline关键字也会自动成为内联函数)。在实现文件中该函数之前要加上inline关键字的方式是有问题的:如果调用的obj文件在函数定义之前生成,那么该处就无法嵌入内...

2016-10-19 13:47:00 529

转载 C++中哪些函数不能声明为virtual?

首先要明确,virtual是用于支持类多态的关键字,所以出现在类声明之外的地方都是错误的。由此可以断定下文的1。 普通函数(即非类成员函数)不能是virtual的,否则不能通过编译,virtual只能出现在类声明中。构造函数(拷贝构造函数/赋值构造函数)不能是virtual的。编译器会为每一个含有virtual函数生成一个函数表(位于rodata段),每个类实例的最前端会包含一...

2016-10-19 13:42:00 757

转载 Hash Table Implementation in C++

对于字符串,所用的hash函数为:size_t _Hash_bytes(const void* ptr, size_t len, size_t seed) { static const size_t mul = (((size_t) 0xc6a4a793UL) << 32UL) + (size_t) 0x5bd1e995UL; const...

2016-10-19 13:42:00 172

转载 Redis集群与高可用性技术小结

客户端分片,这种方式需要实现特定的客户端,需要手工配置redis实例并根据算法进行访问,对于redis实例的增减,调整灵活性很差,一般不推荐。 代理分片,常见的有Twemproxy架构(豆瓣创建了codis,未测试过,在此从略): 优点 sharding逻辑对开发透明,读写方式和单个redis一致。 可以作为cache和storage的proxy(...

2016-10-19 13:19:00 140

转载 基于哈希表的内存泄漏检测方法

在C++程序中,内存问题除了非法改写,还有另一个很重要也很频繁出现的问题是堆内存未释放。如果在高负载网络应用中,出现这个问题,很快会导致服务崩溃。以前检测此类问题的办法是在每一个内存分配和释放处加上log,然后人肉debug,但是……面对几十万行内存分配/释放trace,相信大多数人会丧失查找问题所在的勇气更别说高效率解决问题了。 所幸已经有高人大贤包装了基于内存分配...

2016-09-05 16:01:00 179

转载 C/C++程序中内存被非法改写的一个检测方法

本文所讨论的“内存”主要指(静态)数据区、堆区和栈区空间(详细的布局和描述参考《Linux虚拟地址空间布局》一文)。数据区内存在程序编译时分配,该内存的生存期为程序的整个运行期间,如全局变量和static关键字所声明的静态变量。函数执行时在栈上开辟局部自动变量的储存空间,执行结束时自动释放栈区内存。堆区内存亦称动态内存,由程序在运行时调用malloc/calloc/reallo...

2016-09-01 14:39:00 721

转载 网络IO的虚拟化模型小结

网络IO的虚拟化模型随着技术发展,出现了多种方式,例如emulation、para-virtualization、pass-through和SR-IOV等,本文试图对其做一个简单的总结。Emulation(仿真): 全虚拟化是最早出现的IO虚拟化方式,效率也最低。以接收网络报文为例,其处理步骤可以简单描述如下:数据包到达主机物理网卡,向host CPU发出中断。QEMU...

2015-08-12 03:49:00 178

转载 关于_GNU_SOURCE宏

是在features.h中用于特性控制的一个功能测试宏/user/include/features.h/* If _GNU_SOURCE was defined by the user, turn on all the other features. */#ifdef _GNU_SOURCE# undef _ISOC99_SOURCE# define _ISOC9...

2015-08-12 03:00:00 497

转载 Intel Ivy Bridge Microarchitecture Events

This is a list of all Intel Ivy Bridge Microarchitecture performance counter event types. Please see Intel Architecture Developer's Manual Volume 3B, Appendix A and Intel Architecture Optimizatio...

2015-08-12 02:59:00 191

转载 Intel Sandy Bridge Microarchitecture Events

This is a list of all Intel Sandy Bridge Microarchitecture performance counter event types. Please see Intel Architecture Developer's Manual Volume 3B, Appendix A and Intel Architecture Optimizat...

2015-08-12 02:58:00 215

转载 VIM常用命令

命令历史 以:和/开头的命令都有历史纪录,可以首先键入:或/然后按上下箭头来选择某个历史命令。 启动vim 在命令行窗口中输入以下命令即可 vim 直接启动vim vim filename 打开vim并创建名为filename的文件 文件命令 打开单个文件 vim file 同时打开多个文件 vim file1 fi...

2015-08-11 17:32:00 109

转载 Linux内核编译

解压内核 make mrproper将/boot/confgxxx copy到当前目录并更名为.configmake menuconfig,在这一步可以剪裁内核 make -j4 && make -j4 modules && make modules_install && make installvi /boot...

2015-08-11 17:27:00 150

转载 几个Linux命令

find . -name "*.rpm" -exec mv {} /root/rhevm-packages/ \;如何mount虚拟机的磁盘镜像: fdisk -ul /path/to/imageYou must set cylinders. You can do this from the extra functions menu. ...

2015-08-11 17:25:00 111

转载 移位操作小结

将某个数字x凑到最接近8的整数倍:8-(x%8)或者(-x)&78-(x%8)=8-(x&7)(-x)&7的微妙在于,如果(-x)+x=0,那么(-x)&7可以得到其末3位,这个数与x%8相加就是8。 转载于:https://www.cnblogs.com/CodeComposer/p/4721536.html...

2015-08-11 17:01:00 170

转载 Ceph Paxos相关代码解析

Leader选举 Ceph中的leader选举是一个PaxosLease过程,与BasicPaxos的目的不同。后者用于解决数据一致性问题,而Paxos Lease是为了选举出一个leader承担monmap的同步任务,并负责在该leader离线之后选出新的leader。Ceph集群中只会有一个monitor作为leader,是当前所有monitor中rank值最小的那个。...

2015-08-11 16:56:00 188

转载 水平触发与边缘触发

水平触发(Level Triggered,也称条件触发):select()和poll()将就绪的文件描述符告诉进程后,如果进程没有对其进行IO操作,那么下次调用select()和poll()的时候将再次报告这些文件描述符,所以它们一般不会丢失就绪的消息。 边缘触发(Edge Triggered):只告诉进程哪些文件描述符刚刚变为就绪状态,它只说一遍,如果我们没有采取行动,那么它...

2015-08-11 16:14:00 163

转载 Proactor VS Reactor

两者都是并发编程中常用的设计模式,用于分离和派发I/O事件,但是略有区别: proactor用于异步I/O操作,而reactor用于同步I/O操作。 典型的reactor模型(以读操作为例): 将event handler与socket fd关联;将socket fd注册到分离器(select/epoll等);分离器等待事件;事件发生后,执行非堵塞读...

2015-08-11 02:06:00 65

转载 muduo Library

muduo是由陈硕(http://www.cnblogs.com/Solstice)开发的一个Linux多线程网络库,采用了很多新的Linux特性(例如eventfd、timerfd)和GCC内置函数。其主要特点为: 线程安全,支持多核多线程 不考虑可移植性,不跨平台,只支持 Linux,不支持 Windows。 // 支持Windows有时候代价太大了 在不...

2015-08-11 00:49:00 161

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除