OVH Cloud OVH Cloud

Stoquer des objets de taille 8

21 réponses
Avatar
Marc Boyer
J'aurais besoin de stoquer (en mémoire) une liste dynamique
d'objets O de taille 8.

La solution "liste chainée" est couteuse, dans le sens ou
l'overhead mémoire est de "sizeof(*O)" qui vaut vite 4
(sans compter que malloc il doit bien utiliser un peu
de mémoire quelque part pour se souvenir qu'il a alloué
ce bout de mémoire là).

J'avais donc pensé à une solution ou l'on alloue des
tableaux, et on chaine les tableaux.

Je dois pas être le premier à penser à ça, vous avez
des pointeurs ?

Marc Boyer
--
Lying for having sex or lying for making war? Trust US presidents :-(

10 réponses

1 2 3
Avatar
Gabriel Dos Reis
Emmanuel Delahaye writes:

| In 'fr.comp.lang.c', Gabriel Dos Reis wrote:
|
| > Emmanuel Delahaye writes:
| >
| >| > A part ça, c'est quoi 'obstack' ?.
| >|
| >| Bon, OK, du gnu C... passons...
| >
| > Non. Un truc de la GLIBC.
|
| Bref, c'est pas standard

et alors ?

| et probablement bourré de gnuismes...

Ah bon ? Ça marche même avec des compilos K&R.

-- Gaby
Avatar
Gabriel Dos Reis
DINH Viêt Hoà writes:

|
| > Emmanuel Delahaye writes:
| >
| > | > A part ça, c'est quoi 'obstack' ?.
| > |
| > | Bon, OK, du gnu C... passons...
| >
| > Non. Un truc de la GLIBC.
|
| GLIBC = GNU libc donc, effectivement lié au GNU.

Le monsieur avait dit GNU C. Faut suivre.

-- Gaby
Avatar
Erwan David
Gabriel Dos Reis écrivait :

Emmanuel Delahaye writes:

| In 'fr.comp.lang.c', Gabriel Dos Reis wrote:
|
| > Emmanuel Delahaye writes:
| >
| >| > A part ça, c'est quoi 'obstack' ?.
| >|
| >| Bon, OK, du gnu C... passons...
| >
| > Non. Un truc de la GLIBC.
|
| Bref, c'est pas standard

et alors ?

| et probablement bourré de gnuismes...

Ah bon ? Ça marche même avec des compilos K&R.


Mais tout le bordel qui est dans la glibc n'est pas du c standard...


--
Monde de merde

Avatar
Marc Boyer
Emmanuel Delahaye wrote:
In 'fr.comp.lang.c', Marc Boyer wrote:
J'avais pensé liste chainee parce que c'est l'existant,
mais en décrivant le problème, je réalise que c'est absolument
pas adapté.


Je confirme : tableau dynamique + realloc()


La question suivante est: quelle stratégie d'agrandissement/réduction ?
Je me contente de demander la taille exactement nécessaire, en faisant
confiance à realloc ? Quand c'est trop petit, j'augmente linéairement,
expotiennellement (idem pour le "trop grand") ?
Je pensais à un petit facteur exponentiel (genre +25%).

et j'ajoute memmove() + memcpy() pour les insertions.
Accès rapide par bsearch().


Oui, tout à fait.

Marc Boyer
--
Lying for having sex or lying for making war? Trust US presidents :-(


Avatar
Erwan David
Gabriel Dos Reis écrivait :

Marc Boyer writes:

| J'avais donc pensé à une solution ou l'on alloue des
| tableaux, et on chaine les tableaux.

Tu veux parler du « pool allocator », §19.4.2, TC++PL3 ?


C'est quoi "§19.4.2, TC++PL3" ?

--
Monde de merde

Avatar
Marc Boyer
In article , Erwan David wrote:
Gabriel Dos Reis écrivait :
Marc Boyer writes:
| J'avais donc pensé à une solution ou l'on alloue des
| tableaux, et on chaine les tableaux.

Tu veux parler du « pool allocator », §19.4.2, TC++PL3 ?


C'est quoi "§19.4.2, TC++PL3" ?


Paragraphe 19.4.2 du livre "The C++ Programming Langage",
troisième édition..

Marc Boyer
--
Lying for having sex or lying for making war? Trust US presidents :-(


Avatar
Erwan David
Marc Boyer écrivait :

In article , Erwan David wrote:
Gabriel Dos Reis écrivait :
Marc Boyer writes:
| J'avais donc pensé à une solution ou l'on alloue des
| tableaux, et on chaine les tableaux.

Tu veux parler du « pool allocator », §19.4.2, TC++PL3 ?


C'est quoi "§19.4.2, TC++PL3" ?


Paragraphe 19.4.2 du livre "The C++ Programming Langage",
troisième édition..


Ah...

--
Monde de merde



Avatar
Gabriel Dos Reis
Erwan David writes:

| Gabriel Dos Reis écrivait :
|
| > Emmanuel Delahaye writes:
| >
| > | In 'fr.comp.lang.c', Gabriel Dos Reis wrote:
| > |
| > | > Emmanuel Delahaye writes:
| > | >
| > | >| > A part ça, c'est quoi 'obstack' ?.
| > | >|
| > | >| Bon, OK, du gnu C... passons...
| > | >
| > | > Non. Un truc de la GLIBC.
| > |
| > | Bref, c'est pas standard
| >
| > et alors ?
| >
| > | et probablement bourré de gnuismes...
| >
| > Ah bon ? Ça marche même avec des compilos K&R.
|
| Mais tout le bordel qui est dans la glibc n'est pas du c standard...

C'est vrai. Mais obstack compile avec un compilateur C autre que pour GNU C.

-- Gaby
Avatar
Gabriel Dos Reis
"Antoine Leca" writes:

| Gabriel Dos Reis écrivit:
| > Emmanuel Delahaye writes:
| >
| >>> A part ça, c'est quoi 'obstack' ?.
| >>
| >> Bon, OK, du gnu C... passons...
| >
| > Non. Un truc de la GLIBC.
|
| Tiens, vous l'avez viré de gcc (ou GCC, comme tu veux) ?

Il est encore disponible dans libiberty (la bibliothèque que tu as
décrite plus loin). Mais son utilisation propre dans GCC a étà ©
significativement réduite -- je l'utilise encore dans
pretty-print.[ch] et un peu ailleurs. Mais pour le reste (front ends,
middle end et back ends) il a été remplacé par un bug nomm é garbage
collector.

-- Gaby
Avatar
Laurent Wacrenier
Bertrand Mollinier Toublet écrit:
Je viens d'ecrire un "tableau dynamique". Basiquement, c'est un tableau,
encapsule dans une structure, qui croit au fur et a mesure que tu
ajoutes des objets. Si ca t'interesse, le code est en ligne sur
http://www.bmt.dnsalias.org/employment, rubrique projets, tout en bas de
la page.


http://www.bmt.dnsalias.org/employment-files/dyn_array.c

Le problème, avec realloc(), c'est que tu ne peux pas stoquer dans ta
table de pointeurs qui sont référencés par ailleurs.

1 2 3