Ir para conteúdo
Fórum Script Brasil
  • 0

Tamanho máximo de um vetor!


Felipe Amadio

Pergunta

Seguinte, estou criando um programa em C que analisa dados financeiros de negocios da bolsa.

Com 2 anos de dados, tenho aqui, no meu caso, 300 mil linhas de um arquivo, e gostaria de armazena-las em 3 vetores (cada linha tem 3 colunas, por isso 3 vetores)

Pra ter uma folga, no caso deu precisar de 2 anos e meio ou 3 anos, resolvi declarar meus vetores com 500mil posições, assim:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define NMAX 500000

int main()
{
 int vol[NMAX];
 double preço[NMAX], porcento[NMAX];

Ao compilar, o programa compila, numa boa, e depois ao rodar o programa, tenho uma falha! da aquele classico "o programa 'teste.exe' parou de funcionar".

Reduzindo o valor de NMAX, eu cheguei num momento com a seguinte situação:

Se eu criasse 1 vetor INT, com 300mil posições, não dava problema

1 vetor com 350mil posições, dava problema

2 vetores, cada um com 150 mil posições, não dava problema

3 vetores, cada um com 100 mil posições, não dava problema

3 vetores, cada um com 100 mil posições e 1 vetor com 50 mil posições, dava problema!

Em resumo, meu programa estava com dificuldade de alocar uma quantidade muito grande de posições para os vetores

(quando eu utilizo float ou double no lugar de int, o "NMAX" maximo que eu poderia usar, sem dar problemas, era evidentemente menor, uma vez que floats e doubles ocupam mais espacoes do que ints!)

Não sei se isso deveria acontecer, eu estou com memória disponível de 40Gb no meu computador, então acho pouco provável de ser esse o problema. (não sei nem se isso poderia ter a ver com o HD)

Talvez isso seja alguma configuração do compilador, ou algo a ver com a minha memória RAM, não sei.

Precisaria rodar o programa em algum outro computador, pra ver o que aconteceria!

Mas, a principio, alguém tem noção de qual é o problema e qual seria a solução?

Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

Vou tentar ver qual das duas soluções funciona melhor...

Eu não criei este código, foi meu chefe. Ele criou uma macro em Excel e eu só traduzi para C.

Quanto à ideia de alocar com malloc, existe algum problema explicitou deu realizar o malloc 300mil vezes..? e acredito que eu não daria free até o final da execução do programa (preciso ver se eu preciso, de fato, de todo o documento carregado, ou se eu posso lê-lo aos poucos)

E, também no malloc, tem como eu fazer uma alocação com malloc de modo a poder trabalhar, ainda, com vetores? ou alocar com malloc impolica, necessáriamente, em utilizar listas encadeadas...?

(digo isso pois eu trabalho com 2 indices diferentes neste programa, e não sei se eu tenho "saltos", indo, por exemplo, do indice 100 mil de volta pro indice 1 - numa lista encadeada, eu deveria percorrer todos os elementos até chegar no indice 1, e num vetor, não!)

E, caso seja possível ler aos poucos o arquivo, eu sei que existe, mas não sei como trabalhar com cursores! Como eu tenho 2 indices no meu vetor, pra ir lendo do arquivo aos poucos, eu precisaria de 2 cursores no meu arquivo.

Alguém tem ai algum material bom de cursores ou tem algum jeito simples de explicar...?

Link para o comentário
Compartilhar em outros sites

  • 0
Quanto à ideia de alocar com malloc, existe algum problema explicitou deu realizar o malloc 300mil vezes..? e acredito que eu não daria free até o final da execução do programa (preciso ver se eu preciso, de fato, de todo o documento carregado, ou se eu posso lê-lo aos poucos)

Isso depende do tamanho da heap que seu SO disponibiliza para cada processo.

E, também no malloc, tem como eu fazer uma alocação com malloc de modo a poder trabalhar, ainda, com vetores? ou alocar com malloc impolica, necessáriamente, em utilizar listas encadeadas...?

Você pode usar malloc e realloc. Assim trabalha como se fosse um vetor com colchetes e tudo mais.

Porém, isso necessita ter memória contígua.

Usar listas encadeadas permitiria que você pegasse um pedacinho de memória em qualquer lugar livre. Assim seu programa usaria a memória de forma mais eficiente

E, caso seja possível ler aos poucos o arquivo, eu sei que existe, mas não sei como trabalhar com cursores! Como eu tenho 2 indices no meu vetor, pra ir lendo do arquivo aos poucos, eu precisaria de 2 cursores no meu arquivo.

Alguém tem ai algum material bom de cursores ou tem algum jeito simples de explicar...?

O que você quer dizer com isso?

Não entendi

Talvez postar a estrutura do arquivo deixe tudo mais claro. :)

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...