lecture de fichier et strategie allocation memoire
Bonjour,
J'ai un fichier comprenant un nombre indeterminé de structures identiques (ce qui ne signifie pas qu'elles prennent le même nombre de caractères), mon problème est : quelle est la meilleure strategie pour lire ses données et les stocker? Sachant que je souhaite a terme posseder un tableau, trié pour une recherche plus rapide. (bsearch)
Ce que j'ai implementé consiste à lire le fichier ligne à ligne, et pour chaque ligne creer dynamiquement une structure stockée dans un noeud de liste liee. Puis dans un second temps, connaissant le nombre de structures, de toutes les recopier dans un tableau, puis de trier celui-ci. (qsort)
L'autre possibilitée serait de lire le fichier mais de stocker les structures dans un tableau et si celui-ci n'est pas assez grand, de le reallouer. (Mais cette operation peut etre vraiment "eprouvante" pour l''allocation memoire.)
La premiere solution est predictible en allocation memoire en fonction du nombre de structures mais la seconde peut varier enormement en fonction du rapport nombre de structures dans le fichier et l'espace memoire allouee a chaque depassement de la capacitée du tableau ?
Dans le cas, ou ce fichier est entierement lisible, serait il avantageux de le lire deux fois ? Une fois pour compter le nombre de structure maximale, et l'autre fois pour parser ce fichier et construire les structures?
De meme si on fixe, un nombre de caractère par structure, est il possible de connaitre le nombre total de caractères sans avoir a le lire ? (Le desavantage etant de limiter les donnes pour les grosses structures, et d'alourdir celle plus leger mais sans gagner d'information.)
Si vous avez des remarques, voyez d'autres methodes, n'hesitez pas a poster. ;) D'avance merci.
PS : Je travaille sous linux, mais cela n'implique pas de rejeter des solutions d'ordre plus generale.
PPS: Je considere le tableau trié associé à un bsearch, la meilleure methode pour rechercher mais peut etre il y a mieux egalement. L'avantage du tableau serait que les donnees occupe egalement un nombre minimal de pages en memoires.
(Et pour se qui se pose la question, l'utilisation d'une base de donnée n'est pas une solution retenable.)