Puffer mit variabler Größe
-
Hallo,
ich würde gerne eine Buffer-Klasse mit einer variablen Größe erstellen.
Diese Größe soll beim Instanziieren einmal angegeben werden und danach
nicht mehr veränderbar sein. Die Größe soll nicht als Template-Parameter
festgelegt werden, da erst zur Laufzeit bekannt.Jetzt zu meiner Frage:
Brauch ich dafür wirklich zwangsläufig 2 Speicher-Allokationen?
Ich kann die Größe ja nicht in der Klasse verankern, da sie je erst im
Konstruktor übergeben wird. Also muss ich in der Klasse eine
zweite Allokation machen.Sehe ich das richtig oder habe ich einen Denkfehler?
Gruß,
Mark
-
Du brauchst zwangsläufig eine Speicher-Allokation, aber was meinst du mit der ersten Speicherallokation? Die Allokation des Objektes selbst auf dem Heap/Stack?
-
wxSkip schrieb:
Du brauchst zwangsläufig eine Speicher-Allokation, aber was meinst du mit der ersten Speicherallokation? Die Allokation des Objektes selbst auf dem Heap/Stack?
Ich dachte daran, dass der Puffer auf dem Freestore angelegt wird, wodurch
ich die erste Speicherallokation habe. Hätte ich aber explizit schreiben
sollen.
-
Mark81 schrieb:
wxSkip schrieb:
Du brauchst zwangsläufig eine Speicher-Allokation, aber was meinst du mit der ersten Speicherallokation? Die Allokation des Objektes selbst auf dem Heap/Stack?
Ich dachte daran, dass der Puffer auf dem Freestore angelegt wird, wodurch
ich die erste Speicherallokation habe. Hätte ich aber explizit schreiben
sollen.1. Was ist der Freestore?
2. Was meinst du mit dem Puffer? Die Instanz der Puffer-Klasse oder den Puffer der Puffer-Klasse selbst?
-
Also willst du dass Buffer und die Klasse selbst nur in einem gemeinsamen Speicherblock repräsentiert werden?
Ohne Gewehr (im Browser geschrieben):
class Object { public: BYTE* m_pbBuf; Object(BYTE* _pbData, ULONG _ulSize,BYTE* _BufIndex ):m_pbBuf(_BufIndex+sizeof(Object))/*Buf-pointer zeigt nun auf den verbleibenden Datenraum hinter dem Object*/ { memcpy(m_pbBuf,_pbData,_ulSize); /* Kopier die Daten in der Buffer */ } }; BYTE* Data; //zeigt auf die zu lagernden daten. /* pbBuf zeigt auf den neuen, einen, Speicher */ BYTE* pbBuf = (BYTE*) HeapAlloc(GetProcessHeap(), /* Oder dein eigenen Heap */ HEAP_ZERO_MEMORY, sizeof(Object)+strlen(Data));/* Größen müssen bekannt sein */ Object* pObj = new (pbBuf) Object(Data,strlen(Data),pbBuf);/* Objekt an der Base unseres Buffers erzeugen. */