随笔分类 -  c/c++

[转]谈谈C++中的swap函数
摘要:1,最通用的模板交换函数模式:创建临时对象,调用对象的赋值操作符。[cpp]view plaincopyprint?templatevoidswap(T&a,T&b){Tc(a);a=b;b=c;}需要构建临时对象,一个拷贝构造,两次赋值操作。2,针对int型优化:[cpp]view plaincopyprint?voidswap(int&__restricta,int&__restrictb){a^=b;b^=a;a^=b;}无需构造临时对象,异或因为指针是int,所以基于这个思路可以优化1:[cpp]view plaincopyprint?templatev 阅读全文

posted @ 2013-10-10 11:15 51Liuda 阅读(33034) 评论(0) 推荐(1)

一道指针面试题
摘要:int a=(int)(((int *)0x0)+4);这题其实很简单,但是我想错了。这样拆分吧首先这道题是计算什么,是计算地址。char *p = NULL;cout<<(int)p<<endl;上面的结果就是打印为0。指针p里面记录着指向的地址,值为0。如下,就是计算p1的地址int * p = 0;int *p1 = p+4;cout<<(int)p1<<endl;所以,p+4是偏移了4个字节。所以答案为16。 阅读全文

posted @ 2013-06-18 09:50 51Liuda 阅读(140) 评论(0) 推荐(0)

源码赏析
摘要:之前断断续续的阅读过redis,memcache的源代码,没有深入。 一段时间不看,基本就忘记了。收效甚微。 接下去的一段时间,准备开始再次深入的阅读redis,memcache,nginx的源代码。 这次主要以给源代码写单元测试和注释结合的方式阅读,这样能更深入的去理解其设计精髓。 阅读全文

posted @ 2013-05-29 15:20 51Liuda 阅读(163) 评论(0) 推荐(0)

用c语言简单模拟协程
摘要:看了云风的http://blog.codingnow.com/2012/07/c_coroutine.html,他实现了一个简单的协程调度。我这里仅仅是用c语言模拟了协程,原理很简单。主要是:getcontext()makecontext()swapcontext()这几个函数。具体api详解见http://pubs.opengroup.org/onlinepubs/009695399/functions/makecontext.html#ifndef _CORO_H#define _COEO_H#include <ucontext.h>typedef void (*coro_fu 阅读全文

posted @ 2012-07-24 16:31 51Liuda 阅读(887) 评论(0) 推荐(0)

对象池
摘要:在系统设计中,经常会使用“池”的概念。比如数据库连接池,socket连接池,线程池,组件队列。“池”可以节省对象重复创建和初始化所耗费 的时间,可以简化对象获取和使用的过程。对于那些被系统频繁请求和使用的对象,如果使用这种机制,可以使系统性能得到很大提高。特别象数据库连接这种对 象,客户端与数据库服务器端建立连接时,是比较慢的,如果每次进行数据库操作,都要先进行数据库连接,系统效率将非常低下。 “池”的概念就是将被使用的对象事先创建好,保存在列表中,供客户端取用。当客户端取得一个对象时,这个对象就已经是按照特定上下文环境初始化好,马上即 可使用的了。当客户端使用完毕,需要将对象归还给“池... 阅读全文

posted @ 2012-04-26 21:55 51Liuda 阅读(248) 评论(0) 推荐(0)

strncpy和memcpy
摘要:strcpy strncpymemcpy#include <string.h>char *strncpy(char *restrict s1, const char *restrict s2, size_t n);DESCRIPTION The strncpy() function shall copy not more than n bytes (bytes that follow a null byte are not copied) from the array pointed to by s2 to the array pointed to by s1. If copyin 阅读全文

posted @ 2011-07-04 09:18 51Liuda 阅读(444) 评论(0) 推荐(0)

重载操作符号
摘要:前几天一同学说去**面试,被问到现场写一个string类出来。要写出这个类,主要知道几个默认构造函数,这个也是面试中常考的。第一:拷贝构造函数。string(const string &lhs);第二:赋值构造函数。string & operator=(const string &lhs)//这里就有2个问题第一:赋值构造函数为什么是返回string &//这里是一个引用。第二,operator=(const string &lhs)这里为啥只有一个参数。对于第一个问题。我们知道,=(赋值)操作符,在c++语言在的意义是 a=b。就是b赋值给a。所以,当 阅读全文

posted @ 2011-07-03 14:28 51Liuda 阅读(314) 评论(0) 推荐(0)

对象池
摘要:很早就听过对象池(object pool)这种技术。今天在C++ primer的第641页看到也介绍了这种技术。基本思路是:将用过的对象保存起来,等下一次需要这种对象的时候,再拿出来重复使用,从而在一定程度上减少频繁创建对象所造成的开销。并非所有对象都适合拿来池化――因为维护对象池也要造成一定开销。对生成时开销不大的对象进行池化,反而可能会出现“维护对象池的开销”大于“生成新对象的开销”,从而使性能降低的情况。但是对于生成时开销可观的对象,池化技术就是提高性能的有效策略了。 阅读全文

posted @ 2011-07-03 13:50 51Liuda 阅读(186) 评论(0) 推荐(0)

准备用协程模拟经典的生产者-消费者
摘要:期待~~~ 阅读全文

posted @ 2011-05-22 13:11 51Liuda 阅读(122) 评论(0) 推荐(0)

继承还是组合?
摘要:RT 阅读全文

posted @ 2011-05-10 11:22 51Liuda 阅读(127) 评论(0) 推荐(0)

c++基本知识补习【全放这里了】
摘要:1:今天碰到一件囧事。哎,我很少用条件表达式。expr?a:b哥竟然写成了expr?:a,b 害的最后,总是返回1。小无语啊。 阅读全文

posted @ 2011-05-06 16:51 51Liuda 阅读(193) 评论(0) 推荐(0)

指针
摘要:&(((Type*)0)->member)Type * a = 0;a->member;//端错误。但是&(a->member);//是不会有错误滴。 阅读全文

posted @ 2011-05-05 17:33 51Liuda 阅读(111) 评论(0) 推荐(0)

导航