我编写了一个简单的程序来研究在Linux(64位Red Hat Enterprise Linux Server 6.4版)上使用大量RAM时的性能。(请忽略内存泄漏。)#include <sys/time.h>#include <time.h>#include <stdio.h>#include <string.h>#include <iostream>#include <vector>using namespace std;double getWallTime(){ struct timeval time; if (gettimeofday(&time, NULL)) { return 0; } return (double)time.tv_sec + (double)time.tv_usec * .000001;}int main(){ int *a; int n = 1000000000; do { time_t mytime = time(NULL); char * time_str = ctime(&mytime); time_str[strlen(time_str)-1] = '\0'; printf("Current Time : %s\n", time_str); double start = getWallTime(); a = new int[n]; for (int i = 0; i < n; i++) { a[i] = 1; } double elapsed = getWallTime()-start; cout << elapsed << endl; cout << "Allocated." << endl; } while (1); return 0;}输出是Current Time : Tue May 8 11:46:55 20183.73667Allocated.Current Time : Tue May 8 11:46:59 201864.5222Allocated.Current Time : Tue May 8 11:48:03 2018110.419顶部输出如下。我们可以看到尽管有足够的可用RAM,但是交换增加了。结果是运行时间从3秒猛增到64秒。我的问题是为什么Linux会牺牲性能而不是全部使用缓存的RAM?内存碎片?但是,将数据放在交换上也肯定会造成碎片。是否有一种解决方法可以使3秒钟保持一致,直到达到物理RAM大小?
2 回答
- 2 回答
- 0 关注
- 236 浏览
添加回答
举报
0/150
提交
取消