写内存池时遇到的问题

来源:互联网 发布:大数据开发的项目经验 编辑:程序博客网 时间:2024/04/30 04:55

今天闲来无事,内存池的知识也学了那么久了,就是不知威力如何,于是来试试

写了个最简单的定长的内存池,循环一百万次,VC2005下开了优化选项,release版本,效率比是170:1

唔 很好 很强大

当然,如果要做个功能强大的内存池,肯定没这么快了,但是相信依然能带来可观的效能提升

过程中遇到一个问题,就是我把内存池类的alloc和free函数内联,结果编译报link2001错误,怪了,我已经在头文件中把两函数声明前加上了inline了啊,怎么还会报错?

google了一把,才知道,原来 内联展开是在编译时进行的,而我把函数声明、定义分别放在了h和cpp里,造成main.cpp在编译的时候,找不到对应的函数定义(因为main.cpp和pool.cpp被分别编译了),因此报错了

此问题也很好解决,把函数定义写到对应的头文件里就可以了,编译通过,问题解决,HOHO

以前在《C++入门经典》中看到过内联的介绍,但是一直没有注意这个问题,平时也没太注意优化程序,因此inline用的少,直到今天才暴露出来,惭愧惭愧

同时还搜到一点点有用的信息:

下列的函数为什么不能是虚函数呢?

构造函数

构造函数用来创建一个新的对象,而虚函数的运行是建立在对象的基础上,在构造函数执行时,对象尚未形成,所以不能将构造函数定义为虚函数

 

静态成员函数

静态成员函数属于一个类而非某一对象,没有this指针,它无法进行对象的判别

 

而内联函数,要注意!是可以为虚函数的,但是这不意味着它既是虚函数又inline,因为inline只是对编译器的一个建议而已,但是编译器不一定最终采用,所以,在最终的时候,如果是虚函数,那inline就不会有效,除非运行时能够确定,inline才有可能有效

原创粉丝点击