Dynamic ring buffer in the C++ programming language
Luhtanen, Jere (2024)
Julkaisun pysyvä osoite on
https://urn.fi/URN:NBN:fi:amk-2024100926253
https://urn.fi/URN:NBN:fi:amk-2024100926253
Tiivistelmä
Insinöörityön aiheena on C++-kielellä ohjelmoitu dynaaminen rengaspuskuri. Työn tavoitteena oli kehittää standardikirjaston säiliöiden vaatimuksia vastaava automaattisesti kokoaan muuttava puskuri, joka tarjoaa lisäksi FIFO-ja LIFO-ominaisuuksia. Lopputuotetta testattaisiin vastaavia jo olemassaolevia vaihtoehtoja vastaan ajan ja muistinkäytön suhteen tehokkuusmittauksilla. Työ toteutettiin yhtiön Rightware Oy pyynnöstä. Säiliö tulisi käyttöön heidän C++-käyttöliittymä-ohjelmakehyksessään, jossa tuottaja-kuluttaja-ongelma voisi esiintyä.
Projekti käsittelee sekä hyödyntää C++-standardikirjaston käyttämiä periaatteita ja ominaisuuksia yhtiön vaatimuksesta olla yhteensopiva standardikirjaston kanssa. Säiliö tyydyttäa standardikirjaston vaatimuksia kuten AllocatorAwareContainer ja LegacyRandomAccessIterator ja käyttää laajalti tuettuja periaatteita, kuten RAII:ta ja kopioi- ja vaihda-idiomia. Näitä periaatteita sekä kuuluisan C++-kielen kehittäjän Bjarne Stroustrupin metodeja seuraten oli mahdollista tarjota vahvat poikkeusturvatakuut ja luoda standardikirjaston tyylistä koodia.
Lopputuloksena säiliön tehokkuus oli muistinkäytön ja nopeuden kannalta lähes yhtä hyvä kuin MSVC:n std::vector:n, std::deque:n ja std::list:n tehokkuus. Säiliöllä on etulyöntiasema joustavuudessa, eikä se toimi yhtä hyvin missään yksittäisessa aspektissa kuten verrokkinsa. Rengaspuskuri toimii hyvänä vaihtoehtona olemassaoleville säiliöille, kun yhdistetään std::dequen FIFO- ja LIFO-ominaisuudet sekä std::vectorin yksinkertaisuus.
Projekti käsittelee sekä hyödyntää C++-standardikirjaston käyttämiä periaatteita ja ominaisuuksia yhtiön vaatimuksesta olla yhteensopiva standardikirjaston kanssa. Säiliö tyydyttäa standardikirjaston vaatimuksia kuten AllocatorAwareContainer ja LegacyRandomAccessIterator ja käyttää laajalti tuettuja periaatteita, kuten RAII:ta ja kopioi- ja vaihda-idiomia. Näitä periaatteita sekä kuuluisan C++-kielen kehittäjän Bjarne Stroustrupin metodeja seuraten oli mahdollista tarjota vahvat poikkeusturvatakuut ja luoda standardikirjaston tyylistä koodia.
Lopputuloksena säiliön tehokkuus oli muistinkäytön ja nopeuden kannalta lähes yhtä hyvä kuin MSVC:n std::vector:n, std::deque:n ja std::list:n tehokkuus. Säiliöllä on etulyöntiasema joustavuudessa, eikä se toimi yhtä hyvin missään yksittäisessa aspektissa kuten verrokkinsa. Rengaspuskuri toimii hyvänä vaihtoehtona olemassaoleville säiliöille, kun yhdistetään std::dequen FIFO- ja LIFO-ominaisuudet sekä std::vectorin yksinkertaisuus.