摘要: 一直想写一篇有关C++内存布局的文章,结合编译器VS2010来探讨C++对象模型在内存中的表现形式,主要是自己看《深度探索C++对象模型》太枯燥了,而且这本书也是较早出的,讨论的编译器都差不多过时了,所以才有这个想法,希望看官勿喷。废话少说,let's go...没有虚函数的单继承 下面,我们假设有如下所示的单继承关系: 请注意,在这个继承关系中,父类,子类,都有自己的成员变量。而子类仅仅覆盖了父类的f()函数。 源代码如下:class Base{public: void f(){ cout<<"Base::f()"<<endl; } voi 阅读全文
posted @ 2012-09-11 20:07 venow 阅读(3931) 评论(4) 推荐(1) 编辑
摘要: 摘要:虽然自己编码很重要,但是在遇到一个功能时,利用现成的代码不失为一种好方法,或许还会达到事半功倍的效果。但千万不要单纯地“用”,更多地是理解与提升,这样才会进步。在推动技术变革上,开源运动发挥了非常显著的作用。而Linux成功地将开源转换成商务模式,给广大开源工作者带来了更大的信心和勇气。目前,开源已成为主流,在未来的几年内,它的足迹将会遍布前沿教育、航空航天(如无人驾驶飞机)等许多领域。借鉴现有的开源项目或开源代码,对于初级开发者来说,不失为一种很好的编程手段,但千万不要单纯地“用”,更多地是理解与提升,这样才会进步。下面为大家介绍6款源码搜索引擎,让你找到更适合你的源码。1.Ohloh 阅读全文
posted @ 2013-08-12 19:16 venow 阅读(1066) 评论(0) 推荐(0) 编辑
摘要: 参考July博文:程序员编程艺术:第十章、如何给10^7个数据量的磁盘文件排序,感谢July。 给10^7个无重复的整数排序请看另一篇博文:10^7个无重复的整数排序 对于给10^7个有重复的整数排序,我们不能用位图法来做,位图法只适用于无重复的数字,那么假设我们没有足够的内存去存储这1千万个整数,我们该如何去排序呢?还是分治法,把大化为小。比如:我们可以把这1千万个整数化为10份,用10个文件存储,分别为data1.txt到data10.txt,并且我们的内存足够存储每一份数据,即每一个dataX.txt,这样,我们就可以依次对这10个文件读取进内存,并利用内部排序,如快速排序,对每... 阅读全文
posted @ 2013-01-24 20:37 venow 阅读(888) 评论(0) 推荐(0) 编辑
摘要: 题目:给10^7个无重复的整数排序,即1到10000000,尽量使空间复杂度小。答:首先,我们利用程序来随机生成这10^7个整数,用一个全局数组存储着10^7个整数,然后根据随机生成的下标交换其中两个整数的位置,以达到我们所说的整数是随机的,具体请看下面的代码:const int N = 10000000;int data[N] = {0};void swap(int &a, int &b){ int temp = a; a = b; b = temp;}void generate_no_repeat_number(void){ FILE *fp = fopen("u 阅读全文
posted @ 2013-01-22 20:19 venow 阅读(2623) 评论(0) 推荐(0) 编辑
摘要: 前提:本人2011年毕业于一个普通本科,工作不到2年。 15号晚上7点多,正在炒菜做饭,腾讯忽然打电话来问我对他们的Linux C++的职位是否感兴趣,我表达了我感兴趣之后,就开始了一段简短的电话面试,电话面试主要内容:C++和TCP socket通信的一些基础知识。之后就问我一道算法题:10亿个整数,随机生成,可重复,求最大的前1万个。当时我一下子就蒙了,没反应过来,何况我还正在烧着菜呢,所以我就没细想,说了一个连我都鄙视我的思路:我说导入数据库,然后用select语句选出最大的前1万个。可能我的答案连面试官都无语了,所以他就没再往下问了,不过他还是通知我明天16号早上去腾讯大厦笔试,... 阅读全文
posted @ 2013-01-19 22:03 venow 阅读(54834) 评论(22) 推荐(2) 编辑
摘要: 题目:将一个4字节整数的二进制表示中的001替换为011答:int replace(int num){ unsigned int mode3bit = 7; unsigned int mode1bit = 1; int shift = 0; int result = 0; while (shift < 32) { while (shift < 32 && (num & (mode3bit<<shift)) != (1<<shift)) { result += (num & (mode1bit<<shift))... 阅读全文
posted @ 2013-01-19 22:02 venow 阅读(7166) 评论(3) 推荐(1) 编辑
摘要: 线程池的原理及意义,请移步这篇博文:http://www.cnblogs.com/venow/archive/2012/11/22/2779667.html 下面,介绍的这个线程池与上面提到的那个线程池有一部分相似的地方。 主要区别为: 1、线程池中的每个线程都有自己的互斥量和条件变量,而不是线程池共享一个。 2、线程池中的线程在程序结束时,等待线程池中线程停止的机制不同。 该程序主要由两个文件构成,分别为ThreadPool.h和ThreadPool.cpp文件。 ThreadPool.h文件:#define MAXT_IN_POOL 200#define BUSY_... 阅读全文
posted @ 2012-12-11 20:16 venow 阅读(1746) 评论(2) 推荐(0) 编辑
摘要: 一个简单C\C++内存池,网址如下:http://www.codeproject.com/Articles/27487/Why-to-use-memory-pool-and-how-to-implement-it,大体思路为:初始化时,分配几十个固定大小的内存块供程序使用,程序需要内存时,直接从内存池中取,释放内存时,内存池回收。该程序的内存分配时这样的,不管分配多大内存,只要内存池中有内存块并且内存块大小大于所需要分配的内存,就把这个内存块分配给程序使用,但是这个内存块剩下的内存就不能用了,所以这个内存池实现起来非常简单。共包含两个文件,一个头文件和一个cpp文件。 MemPool.h... 阅读全文
posted @ 2012-12-10 20:59 venow 阅读(3347) 评论(1) 推荐(0) 编辑
摘要: 在我们的工作中,我们经常需要异步执行一些任务,下面介绍的这个可伸缩多线程队列,可满足我们的需求。 出自:http://www.codeproject.com/Articles/4148/Multithreaded-Job-Queue,主要有以下几个功能: 1、任务队列是多线程,许多任务可以异步进行,任务队列使用线程池来执行任务。 2、任务队列支持优先级,优先级高的任务优先执行(即使是后来添加的) 3、任务队列可以被暂停,但是用户还是可以添加任务,当任务队列被唤醒时,任务可以继续执行下去 4、在运行过程中,任务队列使用的线程池,用户可以自行增加和减少 大体框架主要... 阅读全文
posted @ 2012-12-08 11:15 venow 阅读(3699) 评论(0) 推荐(0) 编辑
摘要: 定义: epoll是Linux内核为处理大批句柄而作改进的poll,是Linux下多路复用IO接口select/poll的增强版本,它能显著的减少程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率。因为它会复用文件描述符集合来传递结果而不是迫使开发者每次等待事件之前都必须重新准备要被侦听的文件描述符集合,另一个原因就是获取事件的时候,它无须遍历整个被侦听的描述符集,只要遍历那些被内核IO事件异步唤醒而加入Ready队列的描述符集合就行了。epoll除了提供select\poll那种IO事件的电平触发(Level Triggered)外,还提供了边沿触发(Edge Triggered). 阅读全文
posted @ 2012-11-30 20:39 venow 阅读(32771) 评论(9) 推荐(9) 编辑
摘要: 今天我来看一个简单的写xml文件的一个类,该类非常简单,简单到其实就是C语言的文件操作再上上一点STL的知识,这个类没有MarkupSTL这个C++读写xml文件这么强大,但是如果我们项目中要操作xml文件,完全可以用这个替代或者在这个的基础上进行扩展。 这个xmlwriter类是用来写xml文件,并不能用来读取xml文件,是一个澳大利亚人写的,网址如下:http://www.codeproject.com/Articles/13498/XMLWriter-A-simple-reusable-class,共包含两个文件,一个头文件和一个cpp文件,在代码中我已经添加必要的注释,应该很容易... 阅读全文
posted @ 2012-11-27 20:53 venow 阅读(1645) 评论(1) 推荐(0) 编辑