簡體   English   中英

矩陣乘法錯誤:分段錯誤(核心轉儲)

[英]Matrix multiplication error: Segmentation fault (core dumped)

我有以下代碼,我想計算幾個不同大小的矩陣乘法的運行時間。 我從矩陣大小100開始,一直移動到500,但是當我嘗試1000時,我得到一個錯誤說:分段錯誤(核心轉儲),所以我認為它必須對內存做些什么。 我想計算大小為5000甚至10000的矩陣的運行時間。任何人都可以幫我解決我的問題?

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define SIZE 1000

int main(void)
{
    int A[SIZE][SIZE], B[SIZE][SIZE], C[SIZE][SIZE] = {0};
    int i, j, k;

    srand(time(NULL));

    for(i = 0; i < SIZE; i++)
    {
        for(j = 0; j < SIZE; j++)
        {
            A[i][j] = rand()%100;
            B[i][j] = rand()%100;
        }
    }

    clock_t begin, end;
    double time_spent;

    begin = clock();

    for(i = 0; i < SIZE; i++)
        for(j = 0; j < SIZE; j++)
            for(k = 0; k < SIZE; k++)
                C[i][j] += A[i][k] * B[k][j];

    end = clock();

    time_spent = (double)(end - begin) / CLOCKS_PER_SEC;

    printf("Elapsed time: %.2lf seconds.\n", time_spent);

    return 0;
}

這是一個經典的堆棧溢出 - 你的堆棧上有3個本地陣列,大小約為4 MB(假設32位整數),總共大約12 MB。 在大多數現代操作系統上,堆棧通常為8 MB或更少。 要么使變量成為靜態的,例如

static int A[SIZE][SIZE], B[SIZE][SIZE], C[SIZE][SIZE] = {0};

這樣它們就不再駐留在堆棧上,也不會動態分配它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM