Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

11

16.09.2004, 18:00

Na ein Schwimmingpool ;D


Es ist natürlich ein Memory-Pool. Ist nichts geheimnissvolles dran. Man allokiert irgendwo Speicher und kann dann immer Daten hineinwerfen. In deinem Fall ist es sehr vorteilhaft, weil sich dadurch die Allokation/Deallokation veringern.

Ohne Pool:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
void Send(int type, void* data, int size)
{
     char* temp = new char[size + sizeof(int)];

     // Daten senden

     ....

     delete[] temp;
}



Mit Pool:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
void Send(int type, void* data, int size)
{
     // Pool größe prüfen

     if(m_iPoolSize < (size + sizeof(int))
     {
           // Pool vergrößern

           ResizePool(size + sizeof(int));
     }

     // Daten senden

     .....
}

Man sieht schnell, das sich die Operationen veringern. Nur wenn der Pool zu klein ist, hat man ein paar Operationen mehr. Aber das ist nur in den ersten 1 2 sec des Programmes. Danach hat sich der Pool soweit vergrößert das man alle Daten hineinpacken kann.
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

Dave

Alter Hase

  • »Dave« ist der Autor dieses Themas

Beiträge: 757

Wohnort: Berlin

  • Private Nachricht senden

12

16.09.2004, 18:40

das heißt ich hätte einen pointer auf meinen pool und würde dann immer wenn nötig den speicher vergrößern?
wie würdest du den pool erstellen und den speicher reservieren? mit malloc()?
bzw. wenn ich meinen pool vergrößern will, muss ich doch den alten löschen und mir nen neuen speicherbereich reservieren, oder? einfach hinten dran hängen dürfte ja nur sehr schwer gehen...

13

16.09.2004, 18:44

Ob malloc oder new. Wo ist bei char der Unterschied?

Natürlich must du den alten Pool löschen. Aber du brauchst den Inhalt des Pool's (in diesem Fall) ja nicht kopieren.


Aber wenn ich erhlich bin. Ich würd dir immer noch die Template Variante empfehlen. Die ist einfach schneller :)
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

Dave

Alter Hase

  • »Dave« ist der Autor dieses Themas

Beiträge: 757

Wohnort: Berlin

  • Private Nachricht senden

14

16.09.2004, 20:24

danke.

Werbeanzeige