loki的小型对象疑惑

guolihui112 2012-06-07 11:49:35
想用loki的小型对象内存池。但是测试一个小例子发现,比正常的还要慢, 不知道怎么回事:
在xcode测试结果如下:

small object (16byte)
default
stop watch ...stop watch : 0.78112
Loki::SmallObject
stop watch ...stop watch : 4.89299
big object (8000byte)
default
stop watch ...stop watch : 0.789333
Loki::SmallObject
stop watch ...stop watch : 1.52838

例子是这样的:


#include <loki/SmallObj.h>
#include <iostream>

template <class Type = int>
class StopWatch
{
public:
StopWatch()
{
std::cout << "stop watch ...";
m_beginClock = clock();
}

~StopWatch()
{
clock_t endClock = clock();
clock_t interval = endClock-m_beginClock;
double seconds = (double)interval / CLOCKS_PER_SEC;
std::cout << "stop watch : " << seconds << std::endl;
}

private:
clock_t m_beginClock;
};

enum enSmallObjectSize
{
Size_Small = 4,
Size_Big = 2000,
};


class A { int a[Size_Small]; };
class B : public Loki::SmallObject<> { int b[Size_Small]; };

class D { int d[Size_Big]; };
class E : public Loki::SmallObject<> { int e[Size_Big]; };

int test() {
std::cout << "small object (" << sizeof(int) * Size_Small << "byte)" << std::endl;
{
std::cout << "default" << std::endl;
StopWatch<>* sw = new StopWatch<>;
for (int j = 0; j < 10; j++) {
for (int i = 0; i < 1000000; i++) {
A* a = new A;
delete a;
}}
delete sw;
}
{
std::cout << "Loki::SmallObject" << std::endl;
StopWatch<>* sw = new StopWatch<>;
for (int j = 0; j < 10; j++) {
for (int i = 0; i < 1000000; i++) {
B* b = new B;
delete b;
}}
delete sw;
}
std::cout << "big object (" << sizeof(int) * Size_Big << "byte)" << std::endl;
{
std::cout << "default" << std::endl;
StopWatch<>* sw = new StopWatch<>;
for (int j = 0; j < 10; j++) {
for (int i = 0; i < 1000000; i++) {
D* d = new D;
delete d;
}}
delete sw;
}
{
std::cout << "Loki::SmallObject" << std::endl;
StopWatch<>* sw = new StopWatch<>;
for (int j = 0; j < 10; j++) {
for (int i = 0; i < 1000000; i++) {
E* e = new E;
delete e;
}}
delete sw;
}

return 0;
}


...全文
142 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
FrankHB1989 2012-06-07
  • 打赏
  • 举报
回复
1.默认实现可以有针对平台的优化;
2.长时间随机分配释放小对象,SmallObject的优势较容易体现。
guolihui112 2012-06-07
  • 打赏
  • 举报
回复
楼上。。。。 晕
guolihui112 2012-06-07
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

1.默认实现可以有针对平台的优化;
2.长时间随机分配释放小对象,SmallObject的优势较容易体现。
[/Quote]
在windows下测试loki的例子,也是比默认的慢一倍还多。 只能期待2能发挥作用了

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧