Buffer mit variabler Framelänge so möglich?

Gast #1710681
Lesenswert?
• ▲
▼
Hallo,

ich möchte einen Buffer für einen Datenempfang basteln, der 
unterschiedliche Framelänge hat.

Aussehen tut das ganze momentan von der Definition so:

volatile static struct frameElement
{
  uint8_t  dataByte;
  frameElement* nextFrameByte;
};

volatile static struct bufferElement
{
  frameElement frame;
  bufferElement* nextFrame;
};

bufferElement receiveBuffer = {{0,NULL},NULL};

Das 'Problem' hierbei ist, dass ich zwar Bufferelement in eine feste 
Größe pressen kann und somit kein Speicher mehr freigeben muss, meine 
frameElemente sind aber bewusst unterschiedlich lang, d.h. ich müsste 
diese Speicher dann immer wieder freigeben. Ist die realisierung auf 
einem arm ähnlichen Controller hier so sinnvoll? Funktioniert die 
Freigabe mit free() ? Oder sollte ich das ganze lieber mit Arrays und 
einer festen maximalen Framelänge lösen?

Vielen Dank für eure Hilfe im Vorraus.
#1710690
Lesenswert?
• ▲
▼
Fabian schrieb:

> Das 'Problem' hierbei ist,

Das Problem ist, dass du für jedes Nutzbyte ein paar Bytes (4?) für 
einen Pointer verbrauchst.

> Größe pressen kann und somit kein Speicher mehr freigeben muss, meine
> frameElemente sind aber bewusst unterschiedlich lang, d.h. ich müsste
> diese Speicher dann immer wieder freigeben.

Ja. So ist das wenn man die Speicherfläche an die tatsächliche 
Datengröße anpassen will

> Ist die realisierung auf
> einem arm ähnlichen Controller hier so sinnvoll?

Auch auf einem arm ist das so nicht sinnvoll.
Man könnte höchstens in ein frameElement mehr als nur ein einziges Byte 
reinpacken, damit der Speicherverschnitt nicht so hoch ist.

Aber auch das ist im Grunde mit Kanonen auf Spatzen geschossen. Wenn du 
sowieso dynamisch allokierst, dann sammle erst einmal alle Daten in 
einem anderen Buffer, allokiere eine entsprechend große SPeicherfläche, 
dort kopierst du die Daten hin und ein Pointer auf diese Speicherfläche 
kommt in das bufferElement hinein.


> Oder sollte ich das ganze lieber mit Arrays und
> einer festen maximalen Framelänge lösen?

Im Vergleich zu deinem jetzigen Ansatz: auf jeden Fall

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.