Modèle de tampon rond

Nous commencerons par une implémentation C, car cela nous expose à certains des défis de conception et des compromis lors de la création d`une bibliothèque de tampons circulaires. J`ai choisi uint8_t comme type de données sous-jacent dans cette implémentation. Vous pouvez utiliser n`importe quel type particulier que vous aimez-il suffit de prendre soin de gérer la mémoire tampon sous-jacente et le nombre d`octets de manière appropriée. J`espère que ce poste a été d`une certaine aide dans la compréhension des mémoires tampons circulaires. Nous verrons plus de ces structures de données et des extensions avancées à cette mémoire tampon circulaire qui permet push/pop de non seulement octets, mais tout type de données (même les types de données définis par l`utilisateur) avec la vérification de type et d`autres subtiles dans un futur post. Une autre approche consisterait à briser l`encapsulation, ce qui permet aux utilisateurs de déclarer statiquement des structures de conteneur de mémoire tampon circulaire. Dans ce cas, circular_buf_init doit être mis à jour pour prendre un pointeur struct, ou init peut créer une structure de conteneur sur la pile et le renvoyer. Toutefois, étant donné que l`encapsulation est interrompue, les utilisateurs seront en mesure de modifier la structure sans utiliser les routines de bibliothèque. Cette image affiche une mémoire tampon complète avec quatre éléments (nombres 1 à 4) ayant été écrasés: la deuxième version de la fonction put renvoie une erreur si la mémoire tampon est pleine. Ceci est fourni à des fins de démonstration, mais nous n`utilisons pas cette variante dans nos systèmes.

Les mémoires tampons circulaires sont souvent utilisées comme files d`attente de taille fixe. La taille fixe est bénéfique pour les systèmes embarqués, car les développeurs essaient souvent d`utiliser des méthodes de stockage de données statiques plutôt que des allocations dynamiques. C`est la dernière question qui apparaît concernant les mémoires tampons circulaires. Si de nouvelles données doivent être ignorées ou si elles remplacent les données existantes lorsque la mémoire tampon est pleine. La réponse est, il n`y a aucun avantage clair de l`un sur l`autre, et la plupart du temps sa mise en œuvre/utilisation spécifique. Si les données les plus récentes ont plus de sens pour votre application, passez à l`approche de remplacement. D`autre part, si les données ont à traiter sur un premier arrivé premier-servir mode rejeter. Que diriez-vous de la solution à partir du livre de recettes Python, y compris une reclassification de l`instance de tampon annulaire quand il devient plein? Les mémoires tampons circulaires (également appelées mémoires tampons annulaire) sont des mémoires tampons de taille fixe qui fonctionnent comme si la mémoire est contiguë et circulaire dans la nature. Comme la mémoire est générée et consommée, les données n`ont pas besoin d`être remaniées-plutôt, les pointeurs tête/queue sont ajustés. Lorsque des données sont ajoutées, le pointeur de la tête avance.

Lorsque les données sont consommées, le pointeur de la queue progresse. Si vous atteignez la fin de la mémoire tampon, les pointeurs simplement enrouler autour du début. Tout d`abord, nous devrions réfléchir à la façon dont les utilisateurs interagissent avec une mémoire tampon circulaire: un détail important à noter est que chacune de nos API nécessite un handle de tampon initialisé.