paulo1205
(usa Ubuntu)
Enviado em 02/06/2020 - 16:27h
Cada
double ocupa, em geral, 8 bytes. Numa matriz com 10.000 por 10.000, você tem cem milhões de elementos. Com 8 bytes em cada um deles, serão 800MB de espaço.
Provavelmente seu computador, se tiver menos de quinze anos, tem mais memória que isso.
Só que também faz diferença a forma como você pede que alocação seja feita. Da forma como você fez, você pediu para que a matriz fosse alocada de forma automática, o que, nos nossos PCs, implica alocação na pilha do processador, que normalmente tem muito mais restrições do que a memória de uso geral.
Experimente mudar a forma de alocação. Tente usar alocação estática ou alocação dinâmica.
// Como você tentou fazer, usando alocação automática.
int main(void){
double matriz[10000][10000];
/* ... */
}
// Alternativa 1: alocação estática explícita com escopo restrito ao bloco de main().
int main(void){
static double matriz[10000][10000];
/* ... */
}
// Alternativa 2: alocação estática por meio do uso de escopo global.
double matriz[10000][10000];
int main(void){
/* ... */
}
// Alternativa 3: alocação dinâmica.
int main(void){
double (*p_matriz)[10000][10000]=malloc(sizeof *p_matriz);
if(p_matriz==NULL){
fprintf(stderr, "Alocação de memória para matriz falhou.\n");
exit(1);
}
#define matriz (*p_matriz)
/* ... */
// Ao final do uso, convém liberar a memória.
free(p_matriz);
}
... Então Jesus afirmou de novo: “(...) eu vim para que tenham vida, e a tenham plenamente.” (João 10:7-10)