摘要: C/C++编译过程主要分为4个过程 编译预处理 编译、优化阶段 汇编过程 链接程序 宏是在预处理阶段由预处理器直接替换的,处理的是token,会将所有的name用token string代替,得到的结果仍然是程序文本。而内联函数是在编译期完成展开的,其代码将直接嵌入到汇编程序的文本段。 阅读全文
posted @ 2016-10-19 13:48 CodeComposer 阅读(234) 评论(0) 推荐(0) 编辑
摘要: inline关键字仅仅是对编译器的建议,编译器有权力决定一个函数是否在调用处嵌入。因为内联函数要在调用处展开,编译器必须能在每一个调用处能看到该函数的定义,因此最好将函数实现放在头文件中(而且实现在类定义中的成员函数即便不加inline关键字也会自动成为内联函数)。在实现文件中该函数之前要加上inline关键字的方式是有问题的:如果调用的obj文件在函数定义之前生成,那么该处就无法嵌入内联函数了。... 阅读全文
posted @ 2016-10-19 13:47 CodeComposer 阅读(3091) 评论(0) 推荐(1) 编辑
摘要: 对于字符串,所用的hash函数为: size_t _Hash_bytes(const void* ptr, size_t len, size_t seed) { static const size_t mul = (((size_t) 0xc6a4a793UL) (ptr); // Remove the bytes not divisible by the sizeof(si... 阅读全文
posted @ 2016-10-19 13:42 CodeComposer 阅读(386) 评论(0) 推荐(0) 编辑
摘要: 首先要明确,virtual是用于支持类多态的关键字,所以出现在类声明之外的地方都是错误的。由此可以断定下文的1。 普通函数(即非类成员函数)不能是virtual的,否则不能通过编译,virtual只能出现在类声明中。 构造函数(拷贝构造函数/赋值构造函数)不能是virtual的。编译器会为每一个含有virtual函数生成一个函数表(位于rodata段),每个类实例的最前端会包含一个指向该表的指... 阅读全文
posted @ 2016-10-19 13:42 CodeComposer 阅读(340) 评论(0) 推荐(0) 编辑
摘要: 客户端分片,这种方式需要实现特定的客户端,需要手工配置redis实例并根据算法进行访问,对于redis实例的增减,调整灵活性很差,一般不推荐。 代理分片,常见的有Twemproxy架构(豆瓣创建了codis,未测试过,在此从略): 优点 sharding逻辑对开发透明,读写方式和单个redis一致。 可以作为cache和storage的proxy(by auto-e... 阅读全文
posted @ 2016-10-19 13:19 CodeComposer 阅读(336) 评论(0) 推荐(0) 编辑