Ga naar inhoud

C(++) | Groot geheugen aanvraag


Aanbevolen berichten

Hallo allemaal, Ik moet een enorm grote tabel inlezen via C++ (maar het kan precies hetzelfde in C) en maak gebruik van een 2-dimensionale array waar ik alle waarden in zet. Maar als ik nu zeg: char array[220000][30]; Dan krijg ik runtime meteen een error, dit zal ongetwijfeld komen doordat mijn array zoveel geheugen in beslag neemt. Maar ik heb 512 DDR geheugen en de array neemt "maar" 220000*30*1 (een char is 1 byte groot) = 6600000 bytes = 6.3 Mb in beslag. Heeft iemand hier een oplossing voor? Ik gebruik M$ Visual studio 6.
Link naar reactie
Ik denk dat je opdracht een 'intelligentere' oplossing moet opleveren. Hoewel... Het zou geen probleem moeten zijn als je een 32-bits compiler gebruikt. Echter, weet je zeker dat de array-definitie de runtime error oplevert? Het kan ook ergens anders mee te maken hebben. Overigens, als ik met grote hoeveelheden gegevens werk probeer ik meestal om niet alles in te lezen. Indien het echt nodig is dan maak ik gebruik van een 'Memory Mapped File' in combinatie met een tijdelijk bestand zodat ik in principe de hoeveelheid virtueel geheugen uitbreid zonder al te veel druk op het geheugen zelf te zetten. Maar da's een vrij Windows-specifieke oplossing die een goede kennis van de Windows API vereist.
Link naar reactie
[quote:e9785faf88] Ik ben maar een eenvoudige ziel en van C++ heb ik al bijna helemaal geen kaas gegeten. Maar was het niet zo dat een char alleen maar geschikt is voor één karakter of een kleine integer (<256)? [/quote:e9785faf88] Een char daar kan maar 1 character in ja maar ik heb hier een 2-dimensionale array van chars dus dit kan wel. [quote:e9785faf88] volgens mij zit dat probleem absoluut niet in de geheugengrootte. Als je toch noodzakelijk vindt geheugen vrij te maken kan dat geloof ik met het commando "malloc" In C tenminste wel. [/quote:e9785faf88] malloc() werkt inderdaad alleen in C en in C++ kun je dit makkelijk doen met het commando "new" (werkt grotendeels hetzelfde als in Java het commando "new" werkt). Het had WEL met geheugengrootte te maken, ik vroeg gewoon veel te veel geheugen in een keer aan. Het probleem is BTW opgelost door middel van I/O steeds de cellen in de tabellen te lezen (dus per stuk en niet in 1 keer). Het gaat een stuk sneller dan ik had gedacht. Heel erg bedankt WA! Groeten, Joppe
Link naar reactie

Om een reactie te plaatsen, moet je eerst inloggen

Gast
Reageer op dit topic

×   Geplakt als verrijkte tekst.   Herstel opmaak

  Er zijn maximaal 75 emoji toegestaan.

×   Je link werd automatisch ingevoegd.   Tonen als normale link

×   Je vorige inhoud werd hersteld.   Leeg de tekstverwerker

×   Je kunt afbeeldingen niet direct plakken. Upload of voeg afbeeldingen vanaf een URL in

  • Populaire leden

    Er is nog niemand die deze week reputatie heeft ontvangen.

  • Leden

    Geen leden om te tonen

×
×
  • Nieuwe aanmaken...