Copyright © 2004 Patrick Davalan.

Bops : Piles.


Fonctionnalités.

Présentation générale

API détaillée
Exemples.
Reste à faire.
Voir aussi.

Fonctionnalités.

Bops permet l'accès a des piles. Les piles sont des types simples de données, elles sont communément appelées LIFO (Last In First Out) stacks.
Leur gestion a le même niveau de difficulté que la gestion d'une pile d'assiettes dans un placard, cependant Bops a la particularité de rendre cette pile extensible, il agrandit votre placard lorsque vous voulez ajouter une assiette alors que celle du dessus de la pile touche déjà le haut du placard. il n'a de limites que celles imposées par le plafond de la cuisine (i.e. par la mémoire allouable disponible).
Assez généralement dans leurs utilisations courantes, les piles n'ont pas une très grande taille et l'extensibilité n'est pas une fonctionnalité très importante, elle décharge cependant le programmeur du choix d'une taille à allouer ou de la gestion du parametrage de cette taille par un utilisateur. Il est donc interessant de proposer cette fonctionnalité d'autant que son coût en ressources est faible.
Cette gestion de l'extensibilité de la pile demande a bops peu d'utilisation supplementaire de ressources, il n'execute de code supplémentaire qu'en cas de dépassement de capacité actuelle de la pile et aussi un peu lorsqu'une allocation ajoutée à la pile n'est plus utilisée.

La stratégie d'extension de la pile est paramétrable mais Bops propose un paramètrage par defaut qui convient pour beaucoup de cas d'utilisation des piles.

Pour paramétrer l'extension de la pile, l'utilisateur indique une allocation primaire, le nombre d'éléments disponibles dans la pile à sa création, et une allocation secondaire, le nombre d'éléments alloués lorsque l'allocation primaire (ou une allocation secondaire précédente) ne suffit plus. Bops propose des valeurs par défaut : il calcule le nombre d'éléments qui occupent une page de votre machine.

Afin de limiter les onereuses allocations et libérations de mémoire, Bops a une gestion un peu paresseuse de l'espace, lorsqu'une allocation secondaire n'est plus utilisée, il ne la libère pas d'emblée mais regarde s'il n'y a pas une seconde allocation non utilisée et la libère si c'est le cas. En quelque sorte, il garde toujours une allocation d'avance lorsqu'il en a de disponible, cela peut se réveler une gestion particulièrement économe lorsque le haut de la pile fluctue entre la fin d'une allocation et le début d'une autre.

Cette stratégie simple (mais efficace) n'est pas paramètrable (on ne peut fixer le nombre d'allocations que Bops doit garder d'avance), ce serait une complication que je juge inutile, le choix des allocations primaires et secondaires est sans doute très largement suffisant pour l'immense majorité des utilisations des piles. Laisser Bops choisir ces allocations est aussi un bon choix dans la plupart des cas. A moins que votre pile n'ait qu'une hauteur assez petite pour ne jamais dépasser l'allocation primaire, prenez les valeurs par défaut ou un de leur multiple, le programme bopinfo de Bop-utils vous indiquera les valeurs par défaut calculées pour votre plateforme.

Pour une bonne introduction aux piles, voir ce cours en français.

Les fonctionnalités étendues permettant de n'empiler que sous condition sont détaillées dans le chapitre consacré à l'API détaillée.

Présentation générale

API détaillée.

Exemples.

Des programmes de test de Bop, par ailleurs inutiles, peuvent servir d'exemples :

Reste à faire.

Bops ne sera probablement plus beaucoup modifié.

Voir aussi.

Obstacks, chez moi la documentation se trouve sur :
file:/usr/share/doc/glibc-doc/html/libc_3.html#SEC42



hometop    http://freefeed/bop/bops.php (13/12/2006)      Copyright © 2004 Patrick Davalan.
Il est permis de copier, distribuer et/ou modifier ce document selon les termes et condiions de la GNU Free Documentation License, version 1.2 ou toute version ulterieure publiée par la Free Software Foundation.
Warning: fopen(/home/web/patrick/data/locks/bop%2Fbops.php): failed to open stream: No such file or directory in /home/web/patrick/include/functions.inc on line 315