gpt4 book ai didi

c - 为什么优化器会修复我的程序?

转载 作者:太空宇宙 更新时间:2023-11-04 08:20:51 24 4
gpt4 key购买 nike

我有一个简单的 C 程序来为某些测试运行一些矩阵矩阵乘法:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define N 1000
#define R_M 100

void disp_matrix(double A[N][N]);

int main()
{

clock_t begin, end;
double time_spent;

begin = clock();

int seed = 1;
srand(seed);
double A[N][N];
double B[N][N];
double C[N][N];
for(int i = 0; i < N; i++){
for(int j = 0; j < N; j++){
A[i][j] = (double)rand()/(double)(RAND_MAX/R_M);
B[i][j] = (double)rand()/(double)(RAND_MAX/R_M);
C[i][j] = 0.;
}
}

for(int i = 0; i < N; i++){
for(int k = 0; k < N; k++){
for(int j = 0; j < N; j++){
C[i][k] += A[i][j] * B[j][k];
}
}
}

end = clock();
time_spent = (double)(end - begin) / CLOCKS_PER_SEC;
printf("Time spent: %f\n", time_spent );
/* disp_matrix(C); */
return 0;
}

void disp_matrix(double A[N][N]){
for(int i = 0; i < N; i++){
for(int j = 0; j < N; j++){
printf("%10.3g",A[i][j]);
}
printf("\n");
}
return;
}

如果我编译:

gcc -Wall -std=c11 -O2 test.c -o test && ./test

该程序将运行良好,但是,如果我运行:

gcc -Wall -std=c11 test.c -o test && ./test
/bin/bash: Zeile 1: 10617 Speicherzugriffsfehler ./test

C 可以正常编译,但程序的执行会出现段错误 (Speicherzugriffsfehler)。我真的想不通为什么要这样做。

为什么优化“修复”了我的程序,原始错误在哪里。对于这么小的数组,我应该有足够的内存。

最佳答案

问题的根源是栈上的数组很大,导致栈溢出,导致seg fault事件,

建议将数组从它们当前的 main() 函数范围移动到文件范围。

关于c - 为什么优化器会修复我的程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33502124/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com