C ++程序不依赖虚拟内存

问题描述 投票:0回答:1

我正在做的一项家庭作业要求我们耗尽主内存,以便程序使用虚拟内存,以便我们可以观察和衡量速度的下降。但是,当我获得足够大的内存值时,就会发生段错误或崩溃。我需要用尽主内存并同时使用虚拟内存,而我的印象是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;
}
c++ memory memory-management
1个回答
0
投票

每次对new的呼叫都应有一个对new的呼叫,而对delete的每个呼叫都应有一个对delete的呼叫。

[相反,通过在分配有new[]的存储块上调用delete[],则导致delete。这可能是您崩溃的原因。

© www.soinside.com 2019 - 2024. All rights reserved.