我正在做的一项家庭作业要求我们耗尽主内存,以便程序使用虚拟内存,以便我们可以观察和衡量速度的下降。但是,当我获得足够大的内存值时,就会发生段错误或崩溃。我需要用尽主内存并同时使用虚拟内存,而我的印象是Windows(或其他操作系统)将只处理此问题,至少这就是我所描绘的方式。我正在观察该程序的程序:
#include <stdio.h>
#include <iostream>
#include <chrono>
int sizes[] = { 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768, 65536 };
using namespace std::chrono;
int main(int c, char** args)
{
int** A;
int** B;
int** C;
for (int n : sizes)
{
A = new int*[n];
B = new int*[n];
C = new int*[n];
for (int i = 0; i < n; i++) {
A[i] = new int[n];
B[i] = new int[n];
C[i] = new int[n];
}
milliseconds pre_add1 = duration_cast<milliseconds>(system_clock::now().time_since_epoch());
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
C[i][j] = A[i][j] + B[i][j];
}
}
milliseconds post_add1 = duration_cast<milliseconds>(system_clock::now().time_since_epoch());
milliseconds pre_add2 = duration_cast<milliseconds>(system_clock::now().time_since_epoch());
for (int j = 0; j < n; j++)
{
for (int i = 0; i < n; i++)
{
C[i][j] = A[i][j] + B[i][j];
}
}
milliseconds post_add2 = duration_cast<milliseconds>(system_clock::now().time_since_epoch());
for (int i = 0; i < n; i++) {
delete A[i];
delete B[i];
delete C[i];
}
delete A;
delete B;
delete C;
std::cout << "Size " << n << " took " << (post_add1 - pre_add1).count() << " ms for addition 1" << std::endl;
std::cout << "Size " << n << " took " << (post_add2 - pre_add2).count() << "ms for addition 2" << std::endl;
}
return 0;
}