- 58
- 0
1.我仿照sgi-STL的空间配置器,实现了一个内存池,基本跟其完全一样,但是我写完之后,测试其分配回收内存的速度并不快,要比直接用malloc free还慢一些。
2.是否内存池主要解决的是内存碎片问题,而对效率的提升并不明显,还是我实现的有问题?
使用内存池要1.5s左右,直接用malloc free是1s左右,这是测试用的代码:
#include <iostream>
#include <cstdlib>
#include <vector>
#include <ctime>
#include "memorypool.h"
using namespace std;
//#define USEPOOL
int main(){
MemoryPool pool(10);
clock_t start,end;
int sum=0;
vector<int> randnum(20005);
for(int i=0;i<20000;i++){
randnum[i]=rand()%128;
}
#ifdef USEPOOL
for(int i=0;i<80;i++){
start=clock();
for(int i=0;i<20000;i++){
char *p=(char*)pool.allocate(randnum[i]);
pool.deallocate(p,randnum[i]);
}
end=clock();
sum+=(end-start);
}
cout<<"MemoryPool:20000次申请释放内存(0-128bytes)用时:"<<sum/80<<"毫秒"<<endl;
#else
sum=0;
for(int i=0;i<80;i++){
start=clock();
for(int i=0;i<20000;i++){
char *p=(char*)malloc(randnum[i]);
free(p);
}
end=clock();
sum+=(end-start);
}
cout<<"原生api:20000次申请释放内存(0-128bytes)用时:"<<sum/80<<"毫秒"<<endl;
#endif
return 0;
}
1
打赏
收藏
点击回答
您的回答被采纳后将获得:提问者悬赏的 11 元积分
- 共 0 条
- 全部回答
-
青春壹個敷衍的年華 普通会员 1楼
是的,STL中的内存池的效率相对于原生的会稍低一些。
原生的内存管理在大多数情况下都比STL的内存池更高效,因为它在分配和回收内存时有更明确的规则和更好的空间利用率。原生的内存池可能需要更频繁地进行分配和回收,从而降低了性能。
然而,STL中的内存池提供了更高级别的抽象,可以在很大程度上简化内存管理的工作。例如,STL中的内存池可以自动管理内存分配和回收,避免了手动进行这些工作时的复杂性。此外,STL中的内存池还可以支持多种类型的内存池,包括标准内存池、弱引用内存池、弱引用加固定大小的内存池等,这些都提供了更多的灵活性和可扩展性。
总的来说,原生的内存管理在大多数情况下都比STL的内存池更高效,但在某些特定的场景下,STL的内存池可以提供更多的灵活性和可扩展性。
更多回答
网站公告
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部
