1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Tempo de Execução de ficheiros - Linguagem C

Discussão em 'Programação' iniciada por raVemjr, 12 de Maio de 2007. (Respostas: 6; Visualizações: 1883)

  1. raVemjr

    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?
     
  2. HecKel

    HecKel The WORM

    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
     
  3. theforbidden1

    theforbidden1 Banido

    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
     
  4. souto

    souto To fold or to FOLD?

    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.

    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: 13 de Maio de 2007
  5. TuxBoss

    TuxBoss Power Member

    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á.
     
  6. listas

    podes uzar listas ligadas. não tens k defenir o tamanho.
     
  7. Demio

    Demio Power Member

    O realloc é muito lento disse-me o meu prof de Programação no primeiro semestre :P
     

Partilhar esta Página