Nieuws:

Welkom, Gast. Alsjeblieft inloggen of registreren.
Heb je de activerings-mail niet ontvangen?

Auteur Topic: [Opgelost][C++]Blok geheugen door new gekregen vergroten  (gelezen 2195 keer)

Offline Joshua822

  • Lid
[Opgelost][C++]Blok geheugen door new gekregen vergroten
« Gepost op: 2010/12/23, 19:07:41 »
Hallo allemaal!

Ik vraag mij af of het mogelijk is dat als ik in een programma het statement
data_pointer = new unsigned int [ 2 ]; heb staan het mogelijk is om dit gekregen blok RAM-geheugen te vergroten met twee extra elementen zonder dat ik data_pointer moet aanpassen.

Weet iemand of dit mogelijk is, en zo ja, hoe? Alvast bedankt! :)
« Laatst bewerkt op: 2010/12/24, 13:32:43 door Joshua822 »

Offline hannesvdc

  • Lid
Re: [C++]Blok geheugen door new gekregen vergroten
« Reactie #1 Gepost op: 2010/12/23, 19:34:21 »
Volgens mij is dat niet mogelijk. Wat je wel kan doen,
dat is een vector, list, deque gebruiken van de STL
containers.

hannesvdc

Offline dropl

  • Lid
Re: [C++]Blok geheugen door new gekregen vergroten
« Reactie #2 Gepost op: 2010/12/23, 22:48:42 »
Zie: http://www.cplusplus.com/reference/clibrary/cstdlib/realloc/

Ik dacht zelf dat het geen standaard c/c++ was, maar een *nix dingetje.
Ge wit dit oit noit nie

Offline hannesvdc

  • Lid
Re: [C++]Blok geheugen door new gekregen vergroten
« Reactie #3 Gepost op: 2010/12/23, 23:39:35 »
Het idee van dropl lijkt me goed, alleen moet
je zeer goed opletten voor eventuele memory leaks.

hannesvdc

Re: [C++]Blok geheugen door new gekregen vergroten
« Reactie #4 Gepost op: 2010/12/24, 11:52:45 »
realloc() werkt enkel op geheugen dat je met malloc() hebt verkregen.

Ik vrees dat je een nieuw geheugen moet alloceren, de oude gegevens daar in kopiëren en dan het oud geheugen terug vrij maken.

Maar zoals hierboven al gezegd is, waarom gebruik je geen std::vector?
I use a Unix-based system, that means I'll get laid as often as I have to reboot.
LibSylph
SeySayux.net

Offline Joshua822

  • Lid
Re: [C++]Blok geheugen door new gekregen vergroten
« Reactie #5 Gepost op: 2010/12/24, 13:32:15 »
Ja, dat had ik ook al bedacht, maar dat is niet echt aan te raden als je een écht programma aan het maken bent en je niet zeker weet hoeveel gegevens je gaat opslaan ( zo tientallen MB's aan data gaan kopiëren duurt toch wel even ).

En waarom ik geen std::vector gebruik? Die zou ik wél gebruiken ( ik leef niet meer in 1992, hoor ), maar ik ben gewoon nieuwsgierig of dit mogelijk zou zijn.

En realloc()? Nee dank je, ik heb daar nogal... onprettige ervaringen mee ( brrr... void pointers, goddank voor templates! ) :)

Ik ga dit onderwerp als opgelost markeren. Het antwoord is dus nee, of althans niet op een betrouwbare manier.

Re: [Opgelost][C++]Blok geheugen door new gekregen vergroten
« Reactie #6 Gepost op: 2010/12/25, 10:13:51 »
Ja, dat had ik ook al bedacht, maar dat is niet echt aan te raden als je een écht programma aan het maken bent en je niet zeker weet hoeveel gegevens je gaat opslaan ( zo tientallen MB's aan data gaan kopiëren duurt toch wel even ).

En waarom ik geen std::vector gebruik? Die zou ik wél gebruiken ( ik leef niet meer in 1992, hoor ), maar ik ben gewoon nieuwsgierig of dit mogelijk zou zijn.

En realloc()? Nee dank je, ik heb daar nogal... onprettige ervaringen mee ( brrr... void pointers, goddank voor templates! ) :)

Ik ga dit onderwerp als opgelost markeren. Het antwoord is dus nee, of althans niet op een betrouwbare manier.
Dat kopiëren gaat vrij snel hoor. We spreken hier wel over RAM en niet over schijfruimte. Ik kan in een fractie van een seconde m'n ram (2 GB) volledig vullen. (Dat heet hier "opstartprocedure" :P )
En std::vector of realloc() kopiëren beiden de gegevens naar een nieuwe buffer.
I use a Unix-based system, that means I'll get laid as often as I have to reboot.
LibSylph
SeySayux.net

Offline dropl

  • Lid
Re: [Opgelost][C++]Blok geheugen door new gekregen vergroten
« Reactie #7 Gepost op: 2010/12/25, 13:56:42 »
realloc is efficiënter als er na het bestaande blok nog vrije ruimte is. Dan laat realloc het blok gewoon groeien. Je kan realloc inderdaad gewoon met een NULL pointer gebruiken, dan gedraagt het zich gewoon als malloc.
Ge wit dit oit noit nie