有关内存分配,赋值的时间测试

本文通过实验对比了不同内存大小下new/delete、memset和memcpy的操作时间,揭示了debug与release模式下内存操作的性能差异,指出频繁new/delete及memcpy在大内存情况下会显著降低效率,并提出使用内存池作为优化策略。

有关内存分配,赋值的时间测试

#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模式时间
Debug模式Release模式
在这里插入图片描述

结论

  1. debug和realse在new和delete相差比较明显,其他差不多
  2. new和delete相较于memset和memcpy要耗时一些
  3. 内存比较大的时候,频繁的new delete会比较耗时,这是一个内存优化的点,需要避免频繁的new delete,当然memcpy也需要避免,这个时候可以考虑用内存池进行优化,避免new delete 和memcpy
  4. 比较小的内存1k一下的,频繁的new delete memcpy 不太会影响性能,唯一需要注意的点就是,能栈内存就使用栈,堆内存要注意对其,否则容易产生内存碎片。

测试机器
台式机 I5 8770 6核 内存DDR4 16G,性能比较高,下次在linux和arm里面测试下

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值