关于C语言对cache的测试

运行环境:L1缓存为64K  L2缓存为256K  L3为共享的6M
关于C语言对cache的测试_第1张图片

在linux下循环100000000次,数组大小与执行时间的折线图:
1.观察到64K附近,256K附近运行时间的确发生了变化——与L1,L2有关
2.且数组大小远远大于6M时,其运行时间趋于平稳——与L3有关
3.考虑到运行机器上在跑测试程序时,还在运行其他进程,所以肯定存在其他进程导致的cache交换
使测试结果无法十分精确,但大致上能看出计算机中的确存在cache这个东西的。。。。
关于C语言对cache的测试_第2张图片
开始。。。。是用VS2015做的测试。。。。自己明明关掉了VS2015对代码的优化选项。。。
然而。。。。果然IDE对我们封装了太多太多。。。。
关于C语言对cache的测试_第3张图片
附linux的代码:
#include
#include 
#include 
#include 
#include
#include
#include
using namespace std;


long timediff(clock_t t1, clock_t t2) {
	long elapsed;
	elapsed = ((double)t2 - t1) / CLOCKS_PER_SEC * 1000;
	return elapsed;
}
//忘了linux下没有to_string
string to_string(int a)
{
   ostringstream ostr;
   ostr << a;
   string astr = ostr.str();
   return astr ;
}

int main()
{
	//循环次数
	int repeat_times = 100000000;
	int pre_num = 1;
	for (int num = 1; num < 60*1024*1024; num=num+pre_num)
	{
		char* a = new char[num];
		for (int i = 0; i



你可能感兴趣的:(linux,c++)