euh Kevin, j'ai toujours code en C, et maintenant que je fais un _gros_ proj (par gros, je veux vraiment dire gros, sans doute pas comparable avec ce que toi tu fais), je regrette enormement de pas m'etre mis au C++ avant, vu que je le code en C. et la devine quoi? je me retrouve a emuler des features C++ en C pour avoir le niveau de flexibilite et d'abstraction que je veux. le C est tres bien pour certains trucs, certes.. tu peux meme tout faire en C... presque aussi simplement qu'en C++... du moment que tu fais rien d'autre de plus complexe que des "listes chainees"

arrive un moment ou tu as besoin d'un niveau d'abstraction que tu ne _peux_pas_ avoir avec le C...
C'est quand on essaye d'"optimiser" en réduisant le nombre de realloc (chose qui est assez ridicule parce qu'avec une bonne implémentation de realloc (qui ne déplace le bloc que quand il n'y a pas de place libre juste après), la plupart des appels à realloc sont en O(1)) que ça se complique. Si on réalloue à chaque fois que la taille change (ce qui, comme je viens d'expliquer, ne devrait pas être un problème en pratique, ou alors c'est la libc et/ou le système d'exploitation qui est/sont mal foutu(e)(s)), c'est facile.
tu raconte n'importe quoi... tu veux parler de "performance"?
c'est pas le fait d'utiliser realloc qui est bon ou mauvais, c'est comment tu l'utilise, et la facon dont tu suggere de s'en servir est completement immonde...
je parle de ca: "Si on réalloue à chaque fois que la taille change (ce qui, comme je viens d'expliquer, ne devrait pas être un problème en pratique, ou alors c'est la libc et/ou le système d'exploitation qui est/sont mal foutu(e)(s)), c'est facile."
t'es tellement sur de toi que tu dis des trucs qui sont aberrants point de vue "performance", et rejeter la faute sur l'implementation de la libc c'est sans doute le truc le plus debile que tu peux faire dans ce cas. petite anecdote (pour realloc, et juste pour demonter ton affirmation d'au dessus... oui je sais j'ai rien d'autre a foutre):
l'annee derniere, pour un de mes projs, j'avais (entre autres), un repertoire a scanner pour des fichiers contenant des scripts de shaders (graphiques). le repertoire de test contenait plus de 100 fichiers .shader, avec en moyenne plus de 30 shaders par fichier.
le premier truc que j'ai fait etait pour chaque fichier de parser tous les shaders qu'il contenait, et a chaque shader valide, reallouer le tableau de shaders dans lequel ils etaient stockes.
ca marchait tres bien, hormis que le temps de loading de l'application etait passe de 2-3 secondes a quasiment 1 minute... tres bien, on sort gprof, et oh surprise...
memcpy: 97/98%
mais comme c'est bizarre j'utlisais quasiment aucun memcpy
or realloc, comme tu le sais, quand il n'a plus de place pour etendre la zone memoire a reallouer, il realloue la nouvelle ailleurs, et recopie le contenu de l'ancienne dans la nouvelle, a coups de... memcpy.
en inserant quelques lignes de debug, il est apparu que les 1000-1500 premiers appels a realloc etaient faits en un laps de temps relativement court, mais qu'au fur et a mesure que la taille du tableau augmentait, il devenait de plus en plus difficile d'etendre la memoire a la suite de la zone allouee courante (sans doute pke le heap se faisait fragmenter du a quelques strdup et autres allocations mineures entre deux realloc, j'ai pas approfondi ca), du coup les derniers appels a realloc avaient lieu quasiment a plusieurs secondes d'intervalle, ce qui signifie que c'etait la fonction realloc qui bouffait ces secondes a elle toute seule...
donc deja ton "Si on réalloue à chaque fois que la taille change (ce qui, comme je viens d'expliquer, ne devrait pas être un problème en pratique, ou alors c'est la libc et/ou le système d'exploitation qui est/sont mal foutu(e)(s))" est completement foireux...
ensuite, au lieu de reallouer "à chaque fois que la taille change" ©, j'ai essaye de reallouer par "blocs" de 128 cases a la fois... deja bcp mieux, c'est descendu en dessous de 10 secondes (mais ca va pas te plaire de toute facons, vu que oooh ca fait perdre tout plein d'octets inutiles

)
alors biensur, ca aurait pu etre un tableau de pointeurs au lieu d'un tableau de grosses structures, mais le pbl n'est pas la...
finalement, j'ai laisse tomber realloc, et j'ai plutot "parse" deux fois chaque fichiers, ou plutot, deux passes: la premiere pour compter le nombre de shaders (tres rapide, juste un comptage d'accollades avec 2-3 autres check), malloc a la bonne taille du tableau, et vrai parsing apres.
et la miracle, redescendu a 3-4 secondes.
donc quand tu veux parler d'un truc, histoire d'etre un minimum credible, par pitie evite de sortir des conneries pareilles...