Bonjour à tous,
Jusqu'à présent, j'utilisais des c-string (un simple tableau de char)
plutot que des c++ string pour des raisons de performance (je n'ai que
récemment découvert les moultes réallocations(!!) des string c++).
Je trouve dommage d'avoir à préallouer à chaque fois ce tableau, car je
me retrouve à hardcoder ces valeurs et il est courant d'allouer bien
plus que nécessaire.
J'ai donc codé une solution intermédiaire à base de listes chaînées de
c-string, en ayant un proxy qui alloue de nouveaux blocks si nécessaire.
Le problème, c'est que je dois maintenir un contexte qui contient des
infos telles que la position du curseur courant du block courant,
l'adresse du block courant etc... Et ce maintient est couteux.
J'ai fait quelques recherches sur le WWW à la recherche de solutions
miracles, et j'ai peut etre trouvé mon bonheur dans les ropes
(http://www.sgi.com/tech/stl/Rope.html), dont l'implémentation GNU
semble être exactement reprise de SGI.
Déjà, pensez-vous que je suis sur une bonne piste?
Si oui, je me demande si je pourrai raisonnablement créer des iovecs à
partir des blocks internes des ropes pour éviter des copies inutiles..
Merci
Mel
Bonjour à tous,
Jusqu'à présent, j'utilisais des c-string (un simple tableau de char)
plutot que des c++ string pour des raisons de performance (je n'ai que
récemment découvert les moultes réallocations(!!) des string c++).
Je trouve dommage d'avoir à préallouer à chaque fois ce tableau, car je
me retrouve à hardcoder ces valeurs et il est courant d'allouer bien
plus que nécessaire.
J'ai donc codé une solution intermédiaire à base de listes chaînées de
c-string, en ayant un proxy qui alloue de nouveaux blocks si nécessaire.
Le problème, c'est que je dois maintenir un contexte qui contient des
infos telles que la position du curseur courant du block courant,
l'adresse du block courant etc... Et ce maintient est couteux.
J'ai fait quelques recherches sur le WWW à la recherche de solutions
miracles, et j'ai peut etre trouvé mon bonheur dans les ropes
(http://www.sgi.com/tech/stl/Rope.html), dont l'implémentation GNU
semble être exactement reprise de SGI.
Déjà, pensez-vous que je suis sur une bonne piste?
Si oui, je me demande si je pourrai raisonnablement créer des iovecs à
partir des blocks internes des ropes pour éviter des copies inutiles..
Merci
Mel
Bonjour à tous,
Jusqu'à présent, j'utilisais des c-string (un simple tableau de char)
plutot que des c++ string pour des raisons de performance (je n'ai que
récemment découvert les moultes réallocations(!!) des string c++).
Je trouve dommage d'avoir à préallouer à chaque fois ce tableau, car je
me retrouve à hardcoder ces valeurs et il est courant d'allouer bien
plus que nécessaire.
J'ai donc codé une solution intermédiaire à base de listes chaînées de
c-string, en ayant un proxy qui alloue de nouveaux blocks si nécessaire.
Le problème, c'est que je dois maintenir un contexte qui contient des
infos telles que la position du curseur courant du block courant,
l'adresse du block courant etc... Et ce maintient est couteux.
J'ai fait quelques recherches sur le WWW à la recherche de solutions
miracles, et j'ai peut etre trouvé mon bonheur dans les ropes
(http://www.sgi.com/tech/stl/Rope.html), dont l'implémentation GNU
semble être exactement reprise de SGI.
Déjà, pensez-vous que je suis sur une bonne piste?
Si oui, je me demande si je pourrai raisonnablement créer des iovecs à
partir des blocks internes des ropes pour éviter des copies inutiles..
Merci
Mel
Jusqu'à présent, j'utilisais des c-string (un simple tableau de char)
plutot que des c++ string pour des raisons de performance (je n'ai que
récemment découvert les moultes réallocations(!!) des string c++).
ropes
Jusqu'à présent, j'utilisais des c-string (un simple tableau de char)
plutot que des c++ string pour des raisons de performance (je n'ai que
récemment découvert les moultes réallocations(!!) des string c++).
ropes
Jusqu'à présent, j'utilisais des c-string (un simple tableau de char)
plutot que des c++ string pour des raisons de performance (je n'ai que
récemment découvert les moultes réallocations(!!) des string c++).
ropes
Pardon j'oubliais un détail imp[...]au même).
Mel Higg wrote:Bonjour à tous,
Pardon j'oubliais un détail imp[...]au même).
Mel Higg wrote:
Bonjour à tous,
Pardon j'oubliais un détail imp[...]au même).
Mel Higg wrote:Bonjour à tous,
Ton message est non seulement inutilement long, ce qui résulte dans un
gaspillage de bande passante et de temps, mais en plus n'a aucune
structure logique, puisqu'il est écrit de bas en haut.
Ton message est non seulement inutilement long, ce qui résulte dans un
gaspillage de bande passante et de temps, mais en plus n'a aucune
structure logique, puisqu'il est écrit de bas en haut.
Ton message est non seulement inutilement long, ce qui résulte dans un
gaspillage de bande passante et de temps, mais en plus n'a aucune
structure logique, puisqu'il est écrit de bas en haut.
autant l'argument de la
bande passante date d'un autre âge
faute minime
Sans quoi un simple "Attention danger" suivi du lien que tu donnes aurait suffit
et tout ton laïus (ainsi que le mien !) peuvent être vus comme ce qu'ils sont :
de la pollution inutile
autant l'argument de la
bande passante date d'un autre âge
faute minime
Sans quoi un simple "Attention danger" suivi du lien que tu donnes aurait suffit
et tout ton laïus (ainsi que le mien !) peuvent être vus comme ce qu'ils sont :
de la pollution inutile
autant l'argument de la
bande passante date d'un autre âge
faute minime
Sans quoi un simple "Attention danger" suivi du lien que tu donnes aurait suffit
et tout ton laïus (ainsi que le mien !) peuvent être vus comme ce qu'ils sont :
de la pollution inutile
On Sat, 03 Dec 2005 09:46:52 +0100, Mel Higg :Jusqu'à présent, j'utilisais des c-string (un simple tableau de char)
plutot que des c++ string pour des raisons de performance (je n'ai que
récemment découvert les moultes réallocations(!!) des string c++).
Je ne suis pas sûr qu'il y ait une réelle différence dans les
performances, à cahier des charges égal.
Si tu connais à l'avance la taille de la chaîne (ou un majorant), un
std::string::reserve() évitera les réallocations.
Si tu ne connais pas la taille à l'avance, il y aura forcément des
réallocations.
Oui, mon pb c'est que je ne connais pas systématiquement la taille à
ropes
C'est un concept assez différent de std::string (qui lui-même est
assez proche des C-string), avec des applications différentes. Si tu
as beaucoup d'insertions à faire, rope sera vraisemblablement
meilleur.
De toutes façons, pour connaître la méthode la plus rapide dans ton
contexte, la seule solution est de tester et chronométrer...
Je suis d'accord avec toi sur ta vision empirique, mais il me semble que
On Sat, 03 Dec 2005 09:46:52 +0100, Mel Higg <mailf@free.fr>:
Jusqu'à présent, j'utilisais des c-string (un simple tableau de char)
plutot que des c++ string pour des raisons de performance (je n'ai que
récemment découvert les moultes réallocations(!!) des string c++).
Je ne suis pas sûr qu'il y ait une réelle différence dans les
performances, à cahier des charges égal.
Si tu connais à l'avance la taille de la chaîne (ou un majorant), un
std::string::reserve() évitera les réallocations.
Si tu ne connais pas la taille à l'avance, il y aura forcément des
réallocations.
Oui, mon pb c'est que je ne connais pas systématiquement la taille à
ropes
C'est un concept assez différent de std::string (qui lui-même est
assez proche des C-string), avec des applications différentes. Si tu
as beaucoup d'insertions à faire, rope sera vraisemblablement
meilleur.
De toutes façons, pour connaître la méthode la plus rapide dans ton
contexte, la seule solution est de tester et chronométrer...
Je suis d'accord avec toi sur ta vision empirique, mais il me semble que
On Sat, 03 Dec 2005 09:46:52 +0100, Mel Higg :Jusqu'à présent, j'utilisais des c-string (un simple tableau de char)
plutot que des c++ string pour des raisons de performance (je n'ai que
récemment découvert les moultes réallocations(!!) des string c++).
Je ne suis pas sûr qu'il y ait une réelle différence dans les
performances, à cahier des charges égal.
Si tu connais à l'avance la taille de la chaîne (ou un majorant), un
std::string::reserve() évitera les réallocations.
Si tu ne connais pas la taille à l'avance, il y aura forcément des
réallocations.
Oui, mon pb c'est que je ne connais pas systématiquement la taille à
ropes
C'est un concept assez différent de std::string (qui lui-même est
assez proche des C-string), avec des applications différentes. Si tu
as beaucoup d'insertions à faire, rope sera vraisemblablement
meilleur.
De toutes façons, pour connaître la méthode la plus rapide dans ton
contexte, la seule solution est de tester et chronométrer...
Je suis d'accord avec toi sur ta vision empirique, mais il me semble que
Jusqu'à présent, j'utilisais des c-string (un simple tableau
de char) plutot que des c++ string pour des raisons de
performance (je n'ai que récemment découvert les moultes
réallocations(!!) des string c++).
J'ai fait quelques recherches sur le WWW à la recherche de
solutions miracles, et j'ai peut etre trouvé mon bonheur dans
les ropes (http://www.sgi.com/tech/stl/Rope.html), dont
l'implémentation GNU semble être exactement reprise de SGI.
Déjà, pensez-vous que je suis sur une bonne piste?
Si oui, je me demande si je pourrai raisonnablement créer des
iovecs à partir des blocks internes des ropes pour éviter des
copies inutiles..
Jusqu'à présent, j'utilisais des c-string (un simple tableau
de char) plutot que des c++ string pour des raisons de
performance (je n'ai que récemment découvert les moultes
réallocations(!!) des string c++).
J'ai fait quelques recherches sur le WWW à la recherche de
solutions miracles, et j'ai peut etre trouvé mon bonheur dans
les ropes (http://www.sgi.com/tech/stl/Rope.html), dont
l'implémentation GNU semble être exactement reprise de SGI.
Déjà, pensez-vous que je suis sur une bonne piste?
Si oui, je me demande si je pourrai raisonnablement créer des
iovecs à partir des blocks internes des ropes pour éviter des
copies inutiles..
Jusqu'à présent, j'utilisais des c-string (un simple tableau
de char) plutot que des c++ string pour des raisons de
performance (je n'ai que récemment découvert les moultes
réallocations(!!) des string c++).
J'ai fait quelques recherches sur le WWW à la recherche de
solutions miracles, et j'ai peut etre trouvé mon bonheur dans
les ropes (http://www.sgi.com/tech/stl/Rope.html), dont
l'implémentation GNU semble être exactement reprise de SGI.
Déjà, pensez-vous que je suis sur une bonne piste?
Si oui, je me demande si je pourrai raisonnablement créer des
iovecs à partir des blocks internes des ropes pour éviter des
copies inutiles..
Fabien LE LEZ wrote:
On Sat, 03 Dec 2005 09:46:52 +0100, Mel Higg :
Jusqu'à présent, j'utilisais des c-string (un simple tableau
de char) plutot que des c++ string pour des raisons de
performance (je n'ai que récemment découvert les moultes
réallocations(!!) des string c++).
Je ne suis pas sûr qu'il y ait une réelle différence dans les
performances, à cahier des charges égal. Si tu connais à
l'avance la taille de la chaîne (ou un majorant), un
std::string::reserve() évitera les réallocations. Si tu ne
connais pas la taille à l'avance, il y aura forcément des
réallocations.
Oui, mon pb c'est que je ne connais pas systématiquement la
taille à l'avance (pas plus qu'un majorant d'ailleurs). Et si
je ne la connais pas, dans le cas des string, il y aura
forcément des réallocations mais mon objectif c'est justement
de pallier à cette limite des strings.
ropes
C'est un concept assez différent de std::string (qui lui-même
est assez proche des C-string), avec des applications
différentes. Si tu as beaucoup d'insertions à faire, rope sera
vraisemblablement meilleur. De toutes façons, pour connaître
la méthode la plus rapide dans ton contexte, la seule solution
est de tester et chronométrer...
Je suis d'accord avec toi sur ta vision empirique, mais il me
semble que l'intérêt des ropes n'est pas seulement son
efficacité à l'insertion, mais aussi justement son chainage
interne de blocs évitant d'inutiles réallocations.
Reste l'inconnue de la possibilité d'une interface iovec.. La
structure des ropes reste une inconnue pour moi, il semblerait
à première vue qu'il ne soit pas évident d'en extraire des
iovecs.
Fabien LE LEZ wrote:
On Sat, 03 Dec 2005 09:46:52 +0100, Mel Higg <mailf@free.fr>:
Jusqu'à présent, j'utilisais des c-string (un simple tableau
de char) plutot que des c++ string pour des raisons de
performance (je n'ai que récemment découvert les moultes
réallocations(!!) des string c++).
Je ne suis pas sûr qu'il y ait une réelle différence dans les
performances, à cahier des charges égal. Si tu connais à
l'avance la taille de la chaîne (ou un majorant), un
std::string::reserve() évitera les réallocations. Si tu ne
connais pas la taille à l'avance, il y aura forcément des
réallocations.
Oui, mon pb c'est que je ne connais pas systématiquement la
taille à l'avance (pas plus qu'un majorant d'ailleurs). Et si
je ne la connais pas, dans le cas des string, il y aura
forcément des réallocations mais mon objectif c'est justement
de pallier à cette limite des strings.
ropes
C'est un concept assez différent de std::string (qui lui-même
est assez proche des C-string), avec des applications
différentes. Si tu as beaucoup d'insertions à faire, rope sera
vraisemblablement meilleur. De toutes façons, pour connaître
la méthode la plus rapide dans ton contexte, la seule solution
est de tester et chronométrer...
Je suis d'accord avec toi sur ta vision empirique, mais il me
semble que l'intérêt des ropes n'est pas seulement son
efficacité à l'insertion, mais aussi justement son chainage
interne de blocs évitant d'inutiles réallocations.
Reste l'inconnue de la possibilité d'une interface iovec.. La
structure des ropes reste une inconnue pour moi, il semblerait
à première vue qu'il ne soit pas évident d'en extraire des
iovecs.
Fabien LE LEZ wrote:
On Sat, 03 Dec 2005 09:46:52 +0100, Mel Higg :
Jusqu'à présent, j'utilisais des c-string (un simple tableau
de char) plutot que des c++ string pour des raisons de
performance (je n'ai que récemment découvert les moultes
réallocations(!!) des string c++).
Je ne suis pas sûr qu'il y ait une réelle différence dans les
performances, à cahier des charges égal. Si tu connais à
l'avance la taille de la chaîne (ou un majorant), un
std::string::reserve() évitera les réallocations. Si tu ne
connais pas la taille à l'avance, il y aura forcément des
réallocations.
Oui, mon pb c'est que je ne connais pas systématiquement la
taille à l'avance (pas plus qu'un majorant d'ailleurs). Et si
je ne la connais pas, dans le cas des string, il y aura
forcément des réallocations mais mon objectif c'est justement
de pallier à cette limite des strings.
ropes
C'est un concept assez différent de std::string (qui lui-même
est assez proche des C-string), avec des applications
différentes. Si tu as beaucoup d'insertions à faire, rope sera
vraisemblablement meilleur. De toutes façons, pour connaître
la méthode la plus rapide dans ton contexte, la seule solution
est de tester et chronométrer...
Je suis d'accord avec toi sur ta vision empirique, mais il me
semble que l'intérêt des ropes n'est pas seulement son
efficacité à l'insertion, mais aussi justement son chainage
interne de blocs évitant d'inutiles réallocations.
Reste l'inconnue de la possibilité d'une interface iovec.. La
structure des ropes reste une inconnue pour moi, il semblerait
à première vue qu'il ne soit pas évident d'en extraire des
iovecs.