写内存池时遇到的问题
来源:互联网 发布:大数据开发的项目经验 编辑:程序博客网 时间: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才有可能有效
- 写内存池时遇到的问题
- 写sfss时遇到的问题
- 写留言板时遇到的问题
- 写reactnative时遇到的一些问题
- 写knn时遇到的一些问题
- 写论文遇到的问题
- 写通信协议遇到的问题
- 在写proxy_opengl.dll时遇到的问题.
- 我在写第一个extjs时遇到的问题
- C#写app.config时遇到的问题
- 用VS2005写MFC时遇到的问题汇总
- 往具体地址写数据时遇到的问题
- 用VS2008写MFC时遇到的问题汇总
- 多线程程序写日志时遇到加锁的问题
- 用VS2008写MFC时遇到的问题汇总
- 在编写PHP时遇到的一些小问题
- 写判断素数程序时遇到的小问题
- 在写PetShop购物车时,遇到的相关问题
- .net remoting2.0习作
- OOP例子
- 07-7-31 学习日记(1)
- 集合类的联系与区别
- Excel操作类C#版
- 写内存池时遇到的问题
- .net2.0数据绑定语法
- 撑下去
- WebWork 概述
- 从三个和尚到中国的企业管理
- Struts 概述
- 爆汗!发生在办公室的n多尴尬事
- GridView中设置DataFormatString无效的解决方法
- Spring 概述