Tempo de Execução de ficheiros - Linguagem C

raVemjr

I'm cool cuz I Fold
Eu tou a fazer um projecto em C, e como vectores têem aquelas limitações em relação a tamanho, estava a pensar usar ficheiros para receber o input, mas será que o tempo de execução aumenta drasticamente? Será que devo guardar para um ficheiro e depois passar para um vector? Ou o tempo perdido é negligenciavel?
 
O acesso a ficheiros é bem mais lento que a estruturas. Passa do ficheiro para uma estrutura, trabalha SOBRE a estrutura e quando precisares de gravar grava no ficheiro.

Não faças acessos desnecessários a um ficheiro nem acessos constantes para operações sobre o mesmo que podem ser evitadas.

abraços, HecKel
 
Heckel não respondeste ha questão dele, ele está preocupado com as limitações do tipo de dados array nomeadamente a limitação de depois de ser inicializado o tamanho não mais poder ser modificado.

Tu que percebes muito de C não sabes se há uma classe semelhante ao arraylist do java? A classe arraylist funciona pelo método de pilha/stack em que se pode adicionar sempre...

E sei que o C puro e duro não trabalha com classes :p
 
Podes implementar a tua própria ArrayList :)
Claro que não será uma classe genérica como em Java 1.5, mas pode ser feito.

O único cuidado extra a ter é com os malloc() e os free(). Mas tirando isso, é uma implementação relativamente simples de se fazer.

Respondendo à questão inicial: os tempos de acesso aumentam drasticamente; para aplicações de alta performance e tempo real não é algo recomendável. Lembra-te que para acederes a um ficheiro, tens que fazer várias chamadas ao sistema operativo; a complexidade deste tipo de operações aumenta drasticamente em relação a acederes a posições de memória. O risco de falhas também.
Mas como solução pó desenrasca serve.

A classe arraylist funciona pelo método de pilha/stack em que se pode adicionar sempre...

Já agora aproveito para te esclarecer. Não funciona como uma pilha. Basicamente, o que acontece é o seguinte:

- É criada uma array estática com tamanho X;
- Quando a array estática está cheia, é criada uma nova array com o dobro do tamanho (2X), os valores são copiados da array antiga para a nova e a antiga é eliminada (derreferenced, no caso do Java).
- Quando a array esvazia para metade, é criada uma array com metade do tamanho, copiados os valores e a array antiga é eliminada.
- A eficiência desta implementação é O(1). Como a cópia é efectuada para N elementos de N em N tempo temos que O(N) para N elementos, ou seja O(N/N) = O(1).

Basicamente é isto.

Cumprimentos.
 
Última edição:
realloc() anyone?

Usas ptrs em vez de arrays estáticos e tens o prob resolvido.
Além de que essa teoria de carregar um ficheiro todo para memória e depois trabalhar sobre ele, é bonito se for com coisas pequenas, se for com ficheiros grandes, não dá.
 
realloc() anyone?

Usas ptrs em vez de arrays estáticos e tens o prob resolvido.
Além de que essa teoria de carregar um ficheiro todo para memória e depois trabalhar sobre ele, é bonito se for com coisas pequenas, se for com ficheiros grandes, não dá.
O realloc é muito lento disse-me o meu prof de Programação no primeiro semestre :P
 
Back
Topo