有关内存分配,赋值的时间测试
#include <iostream>
#include <common/utils.h>
#include <common/TimeSpan.h>
using namespace std;
void Test(int mem_size) {
cout << "========================" << endl;
cout << "Test mem size = ";
if (mem_size < 1024) {
cout << mem_size;
}
else {
cout << mem_size / 1024 << "k";
}
cout << endl;
TimeSpan span;
span.start();
for (int i = 0; i < 100000; i++) {
byte* b = new byte[mem_size];
delete[]b;
}
cout << "100000 times new delete use time = " << span.elapsed() << endl;
span.restart();
byte* b = new byte[mem_size];
for (int i = 0; i < 100000; i++) {
memset(b, 0, mem_size);
}
delete[]b;
cout << "100000 times memset use time = " << span.elapsed() << endl;
{
span.restart();
byte* b = new byte[mem_size];
byte* cp = new byte[mem_size];
for (int i = 0; i < 100000; i++) {
memcpy(b, cp, mem_size);
}
delete[]b;
delete[] cp;
cout << "100000 times memcpy use time = " << span.elapsed() << endl;
}
}
int main(int, char* [])
{
Test(1);
Test(10);
Test(1000);
Test(1024*100);
Test(1024 * 1024);
return 0;
}
debug模式时间
Release模式
结论
- debug和realse在new和delete相差比较明显,其他差不多
- new和delete相较于memset和memcpy要耗时一些
- 内存比较大的时候,频繁的new delete会比较耗时,这是一个内存优化的点,需要避免频繁的new delete,当然memcpy也需要避免,这个时候可以考虑用内存池进行优化,避免new delete 和memcpy
- 比较小的内存1k一下的,频繁的new delete memcpy 不太会影响性能,唯一需要注意的点就是,能栈内存就使用栈,堆内存要注意对其,否则容易产生内存碎片。
测试机器
台式机 I5 8770 6核 内存DDR4 16G,性能比较高,下次在linux和arm里面测试下