- 博客(15)
- 收藏
- 关注
转载 c++ viod 函数
1.概述 许多初学者对C/C++语言中的void及void指针类型不甚理解,因此在使用上出现了一些错误。本文将对void关键字的深刻含义进行解说,并详述void及void指针类型的使用方法与技巧。 2.void的含义 void的字面意思是“无类型”,void *则为“无类型指针”,void *可以指向任何类型的数据。 void几乎只有“注释”和限制程序的作用,因为从
2013-07-08 00:14:15
4339
转载 [C/C++]结构体大小的计算方法
通常情况下,由于地址对齐(alignment)的需要,结构体各成员之间或结构体的尾部需要添补一些空白字节(padding),因而结构体的大小并不一定等于各成员大小之和。包含相同成员的结构体,如果成员声明的顺序不同,其占用的内存空间也可能不同。尽管在程序中可以利用sizeof获取当前编译条件下结构体所占内存空间的大小,但深入了解结构体中成员对齐所遵循的规则也很有必要。首先需要说明一下对齐的概
2013-07-05 11:57:41
1996
转载 有哪几种情况只能用intialization list 而不能用assignment?
无论是在构造函数初始化列表中初始化成员,还是在构造函数体中对它们赋值,最终结果都是相同的。不同之处在于,使用构造函数初始化列表初始化数据成员,没有定义初始化列表的构造函数在构造函数体中对数据成员赋值。对于const和reference类型成员变量,它们只能够被初始化而不能做赋值操作,因此只能用初始化列表。还有一种情况就是,类的构造函数需要调用其基类的构造函数的时候。请看下面的代码:1
2013-07-05 11:40:10
1859
转载 C++ 虚函数表解析
前言 C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是试图做到在编译时决议,要么试图做到运行时决议。 关于虚函数的使用
2013-07-05 09:51:43
638
转载 MMORPG的数据包系
#本文发表于08年12月《程序员》杂志,贴出以备遗失。 对!我想介绍的和你从标题中理解的是一样的东西:大型多人在线角色扮演游戏客户端和服务器端之间通讯的数据包!之所以加一个“系”,是因为我想包含围绕数据包展开工作的相关话题。下面我所提到的数据包系就是基于这个定义。在我看到的很多网络应用中,数据包系的设计千奇百怪。这么形容并不是贬意,数据包系的本身并没有一个固定的模式,也不可能有一个统一的模
2013-07-04 23:42:00
826
转载 游戏中的状态机
游戏中的状态机#本文发表于08年5月《程序员》杂志 贴出以备遗失 基本上所有的软件都是有限状态机(finite-state machine,FSM)。什么是FSM呢?它是一个有向图,由一组节点和一组相应的转移函数组成。这句话是在写作这篇文章前刚从书上抄来的。通俗一点讲,它是一个事件驱动系统的模型,这个模型由有限数目的状态,若干输入和状态与状态之间转换的规则组成。在某一时刻,有一个或
2013-07-04 23:40:36
1152
转载 简洁高效的LRU Map C++实现
LRU是缓存替换的一个重要原则。其思想可以广泛的应用于很多场合。通过维护一个Key和Timestamp之间的双向映射,可以实现一个简洁高效的通用LRU Map。 1: #include 2: #include 3: #include 4: using namespace std; 5: 6: template
2013-07-04 22:13:46
1563
转载 通过STL实现带LRU的CACHE
开发互联网的server系统,难免会用一些cache机制,通常在Linux下多使用共享内存机制,把分配的内存组织成一个特定的数据结构,用来缓存后端DB的数据,加速读写。但是对一些新手而言,共享内存的使用还是有一些门槛,与此同时STL的使用却是相对容易上手,所以可以通过STL的容器组合出一个cache来。 上网搜了一下,看到已经有人做了一些类似的事情,具体可以参看http://
2013-07-04 22:06:51
981
原创 腾讯公司后台服务器经典面试题
网上找的题目,自己作答1, 使用Linux epoll模型,水平触发模式(Level-Triggered);当socket可写时,会不停的触发socket可写的事件,如何处理? 第一种最普通的方式: 当需要向socket写数据时,将该socket加入到epoll模型(epoll_ctl);等待可写事件。 接收到socket可写事件后,调用write()
2013-07-04 20:53:51
1827
原创 linux C++服务器面试题
1.TCP/IP 建立连接的过程?(3-way shake) Client与server建立TCP连接时:首先Client向server发SYN(请求),然后server回复(应答请求),最后Client回复,这样TCP就建立一次连接(三次握手)的过程就建立了2.使用udp和tcp进程网络传输,为什么tcp能保证包是发送顺序,而 udp无法保证? 1.
2013-07-04 20:41:35
2933
原创 实用面试题
1.C++ STL中判断list为空,size()==0和empty()有什么区别关于两个的区别,首先size()==0为bool表达式,empty()为函数调用,这一点很明显。查看源代码,[cpp] view plaincopybool empty() const { return _M_node->_M_next == _M_node
2013-07-04 19:13:18
760
原创 C/C++ 笔试、面试题目大汇总
这些东西有点烦,有点无聊。如果要去C++面试就看看吧。几年前网上搜索的。刚才看到,就整理一下,里面有些被我改了,感觉之前说的不对或不完善。 1.求下面函数的返回值( 微软)int func(x) { int countx =0; while(x) { countx ++; x = x&(x-1); } return countx; }
2013-07-04 16:55:33
758
转载 C++对象池技术剖析
对象池就是一定数量已经创建好的对象的集合。可以事先创建一批对象,放在一个链表中,以后每当程序要新的对象时,都从对象池中获取,每当程序用完该对象后,都把该对象归还给对象池。这样就少了很多的malloc/free操作,在一定程度上提高了系统的性能,尤其在动态内存分配比较频繁的程序中效果尤其明显。对象池的特征:1、对象池中有一定数量创建好的对象。2、对象池向用户提供获取对象的
2013-04-26 11:23:52
758
转载 深入浅出对象池(Object Pool)
在稍微大型一点的软件系统开发中,通常我们会用到内存池,对象池,线程池,连接池等各种各样的池(Pool),本文就来讲一讲对象池(Object Pool)。下面从四个方面来介绍一下对象池:1.什么是对象池(Object Pool) ?池(Poo), 与集合在某种意义上有些相似。 水池,是一定数量的水的集合;内存池,是一定数量的已经分配好的内存的集合;线程池,是一定数量的已经创建好的线程的集
2013-04-26 11:20:53
1226
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅
2