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

1

21.05.2012, 19:22

C++ Maximale Anzahl an Elementen in einem Vektor, und wie könnte man diese Zahl erhöhen

Hey Leute,
ich habe mal eine Frage, weiß jemand zufällig von euch was die maximale Anzahl an Elementen in einem Vektor ist,
um die Elemente anhand ihrer Indexnummer anzusprechen könnte man ja maximal, wenn man int benutzt, bis auf 2^32 Elemente kommen.

Habt ihr ne Idee wie das anders ginge?

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

2

21.05.2012, 19:29

Dir reichen 1073741823 Elemente nicht aus?
Dann mach halt einen Vektor, welcher Vektoren speichert. Sobald einer voll ist geht es zum zweiten.

MfG
Check

3

21.05.2012, 19:58

Dann machst du garantiert was falsch. Selbst wenn jeder Eintrag nur 1 Byte hat, wärst du bei 4GB. Und wenn man mit so enormen Datenmengen hantiert, möchte man garantiert spezielle Strukturen benutzen, um das irgendwie handeln zu können. Alles in einen einzigen Vektor zu packen, hört sich da ziemlich ungünstig an.
Lieber dumm fragen, als dumm bleiben!

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

4

21.05.2012, 20:23

maximale größe eines std::vector ist size_t. Dieses ist übrigens immer genauso groß wie der Adressraum des Betriebsystems. Also was genau ist das Problem?
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

Developer_X

Treue Seele

  • »Developer_X« ist der Autor dieses Themas

Beiträge: 247

Wohnort: Hessen

Beruf: Schüler

  • Private Nachricht senden

5

22.05.2012, 17:39

maximale größe eines std::vector ist size_t. Dieses ist übrigens immer genauso groß wie der Adressraum des Betriebsystems. Also was genau ist das Problem?


Ja, aber wie soll ich die ansprechen, wenn ich nen längeren String habe, wie z.B. beim auslesen einer txt Datei, da habe ich ja auch mehr als 2^32 chars in meiner Datei.
Wie kann ich denn auf die einzelnen Elemente zugreifen? Mit unsigned int? Da kann man nur 2^32 elemente ansprechen, pa.
- Die Zeit ist wie ein Fluss, und die Gegenwart wie ein Fels, der von dem Fluss der Zeit geschliffen wird. -
Kevin Riehl

Sylence

Community-Fossil

Beiträge: 1 663

Beruf: Softwareentwickler

  • Private Nachricht senden

6

22.05.2012, 17:44

Du hast 4GB+ große Textdateien ?

7

22.05.2012, 17:50

@Sylence: Das könnten Messdaten sein. Ich hatte auch mehr als 4GB große Dateien.

@DeveloperX: Da hätte ich die Datei in kleinere einzelne Dateien verteilt.

Mfg

Sylence

Community-Fossil

Beiträge: 1 663

Beruf: Softwareentwickler

  • Private Nachricht senden

8

22.05.2012, 18:05

Also alle Geräte mit denen ich bisher gearbeitet hab, die Messdaten ausgespuckt haben, waren schon so freundlich und haben die nicht in einem rausgehauen ;)

Aber ja die Lösung ist dann natürlich das selber zu machen und die Dateien stückchenweise zu verarbeiten

Schrompf

Alter Hase

Beiträge: 1 470

Wohnort: Dresden

Beruf: Softwareentwickler

  • Private Nachricht senden

9

22.05.2012, 18:25

Oder Du baust eine 64Bit-Anwendung. Bei korrekter Verwendung von size_t bist Du damit auf der sicheren Seite. Ob alles in den Speicher passt, ist dann die andere Frage.
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.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

10

22.05.2012, 18:51

maximale größe eines std::vector ist size_t. Dieses ist übrigens immer genauso groß wie der Adressraum des Betriebsystems. Also was genau ist das Problem?


Ja, aber wie soll ich die ansprechen, wenn ich nen längeren String habe, wie z.B. beim auslesen einer txt Datei, da habe ich ja auch mehr als 2^32 chars in meiner Datei.
Wie kann ich denn auf die einzelnen Elemente zugreifen? Mit unsigned int? Da kann man nur 2^32 elemente ansprechen, pa.

Gar nicht, länger als size_t geht nicht, das würde bedeuten dass den den kompletten verfügbaren Speicher voll hast...

Wenn du wirklich mit derart riesigen Dateien arbeiten musst, dann überleg zuerst mal ob du wirklich die komplette Datei im Speicher halten musst, oder ob du nicht einfach Streamen kannst. Und schau dir vielleicht auch mal Memory Mapped IO an, damit kannst du Teilbereiche einer Datei in den Speicher mappen...

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »dot« (22.05.2012, 19:03)


Werbeanzeige