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

Developer_X

Treue Seele

  • »Developer_X« ist der Autor dieses Themas

Beiträge: 247

Wohnort: Hessen

Beruf: Schüler

  • Private Nachricht senden

11

23.05.2012, 09:15

Eigentlich geht es nicht um Dateien, sondern um eine Liste mit Daten, die allerdings wie gesagt "virtuell gestreamt" werden können.
Es ist kompliziert zu erklären, also ich habe viele Daten die bei der Berechnung eines Phänomens entstehen, doch diese muss ich nicht,
wie ihr ja bereits gesagt habt, alle im Arbeitsspeicher halten, sondern kann sie ja teilweise in dateien oder so schreiben.

Ich habe einen 32-bit PC das bedeutet ja dass ich mit size_t dann insgesamt eine liste mit 2^32 Elementen speichern kann, gut das reicht zum
streamen sogar alle male aus^^.

Danke,

m.f.G. Developer_X
- Die Zeit ist wie ein Fluss, und die Gegenwart wie ein Fels, der von dem Fluss der Zeit geschliffen wird. -
Kevin Riehl

Legend

Alter Hase

Beiträge: 731

Beruf: Softwareentwickler

  • Private Nachricht senden

12

23.05.2012, 09:42

Du wirst in der Praxis trotzdem keine 2^32 Elemente auf einmal laden können.
"Wir müssen uns auf unsere Kernkompetenzen konzentrieren!" - "Juhu, wir machen eine Farm auf!"

Netzwerkbibliothek von mir, C#, LGPL: https://sourceforge.net/projects/statetransmitt/

Schrompf

Alter Hase

Beiträge: 1 470

Wohnort: Dresden

Beruf: Softwareentwickler

  • Private Nachricht senden

13

23.05.2012, 11:01


Ich habe einen 32-bit PC das bedeutet ja dass ich mit size_t dann insgesamt eine liste mit 2^32 Elementen speichern kann, gut das reicht zum
streamen sogar alle male aus^^.


Nein, das ist eigentlich immernoch falsch.

a) Was nimmst Du zur Adressierung eines einzelnen Elements? Ein size_t ist auf 32Bit-Maschinen ein unsigned int, hat also einen Wertebereich von 0 bis 2^32-1. Wenn Dir das reicht, ist alles gut.

b) Die maximale Größe eines std::vector. Du hast ein 32Bit-Betriebssystem, also kann der größte zusammenhängende Speicherblock nur 2^32 Byte lang sein, also 4 GB. Und das ist die Grenze, die Dir std::vector::max_capacity() zurückgibt : 4 GB geteilt durch die Größe des gespeicherten Elements.

c) Du wirst in der Praxis schon weit vorher scheitern - auf Windows 32Bit hast Du z.B. nur 2GB an Adressraum für Deine Anwendung, außer Du aktivierst in den VisualStudio-Projekteinstellungen "Große Adressen aktivieren" und Du konfigurierst Dein Windows, so dass es mehr als 2GB für Anwendungen gibt. Unter 64Bit-Betriebssystemen reicht nur der ProjektKonfig-Flag, und eine 32Bit-Anwendung hat volle 4 GB.

c2) Du wirst in der Praxis auch dann noch weit vorher scheitern, weil für einen std::vector der Speicher als ein kontinuierlich zusammenhängender Block zur Verfügung stehen muss. Wenn Du vorher schon ein paar Allokationen gemacht hast, reduziert sich diese Maximalgröße eines zusammenhängenden Blocks schnell.

d) Wenn Du streamst, ist wieder alles gut. Dann kannst Du auch einfach einen uint64_t (aus stdint.h) als Index nehmen und _fseeki64() und Artverwandte zum Spulen in Dateien, und die Maximalgröße Deiner Daten liegt weit jenseits des Nirvanas. Dann kann Dir aber noch das Dateisystem Ärger machen: FAT32 (wird manchmal noch auf USB-Sticks verwendet) kann nur Dateien mit bis zu 4GB Größe anlegen.

So, genug im Trüben gefischt. Du wirst ja merken, wo es hängt, wenn Du mal mit solchen Dateigrößen arbeitest.
Häuptling von Dreamworlds. Baut aktuell an nichts konkretem, weil das Vollzeitangestelltenverhältnis ihn fest im Griff hat. Baut daneben nur noch sehr selten an der Open Asset Import Library mit.

Developer_X

Treue Seele

  • »Developer_X« ist der Autor dieses Themas

Beiträge: 247

Wohnort: Hessen

Beruf: Schüler

  • Private Nachricht senden

14

24.05.2012, 19:16

Schon gut so, ich werde eh nur streamen, und den größten Teil an Ergebnissen meiner Rechnungen in Einzeldateien speichern.

LG
Developer_X
- Die Zeit ist wie ein Fluss, und die Gegenwart wie ein Fels, der von dem Fluss der Zeit geschliffen wird. -
Kevin Riehl

Werbeanzeige