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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren