Avatar billede bundgaard Nybegynder
24. februar 2003 - 14:30 Der er 20 kommentarer og
1 løsning

malloc ?

Har lidt problemer med min malloc :/

Jeg skal ha den til at allokere 1000 bytes hver gang den bliver loopet..

det her er hvad jeg har indtil videre:

/// test ///
#include <stdio.h>
#include <stdlib.h>

int main()
{
int *ip;
int i;

for(i = 1; i < 5000; i++)
    ip = malloc(sizeof(int));
return 0;
}


Det eneste der sker er at der står "Press any key to continue" :/
Avatar billede erikjacobsen Ekspert
24. februar 2003 - 14:34 #1
Det er bare for sjov, ikke ?

ip = malloc(1000);
Avatar billede soreno Praktikant
24. februar 2003 - 14:34 #2
Det er fordi det går så hurtigt at du ikke når at vente på at loopet bliver færdigt.
Avatar billede arne_v Ekspert
24. februar 2003 - 14:37 #3
Hvad er det helt præcist du vil ?
Avatar billede bundgaard Nybegynder
24. februar 2003 - 14:37 #4
det er bare for sjov erik :)

vi prøvede det med min lærer og så ville jeg da lige som jeg ik kunne finde ud af det..

soreno > burde den så ikke opretholde en masse hukommelse i rammene?
Avatar billede bundgaard Nybegynder
24. februar 2003 - 14:39 #5
så virkede det

/// test ///
#include <stdio.h>
#include <stdlib.h>

int main()
{
int *ip;
int i;

for(i = 1; i < 5000000; i++)
    ip = malloc(100);
return 0;
}

øgede antal gange den kørte og lod den allokere lidt mindre :)

erik > smider du et svar?
Avatar billede soreno Praktikant
24. februar 2003 - 14:40 #6
Det kommer an på dit Operativ System. Windows releaser, så vidt jeg husker, selv alle resourcer som dit program har allokeret - men derfor bør du nu rydde op alligevel :-)
Avatar billede bundgaard Nybegynder
24. februar 2003 - 14:42 #7
Hehe..jep, da jeg lukkede programmet frigab Windows en masse ram :)

Men jeg takker for hjælpen!
Avatar billede arne_v Ekspert
24. februar 2003 - 14:43 #8
Alle bare kvart fungerende operativ-systemer frigør memory
allokeret med malloc, når et program afslutter.
Avatar billede segmose Nybegynder
24. februar 2003 - 16:00 #9
/*
Der er jo ikke sikkert at alle operativ systemer overholder malloc's
krav til operativ systemet.

fx. følgende kode er ikke garanteret at virke på en kendt operativ
system, selvom den første malloc fungere.
*/
// indsæt her et passende antal include.

int main(void) {

char
  *test;

assert(test = malloc(1000000));
free(test);
assert(test = malloc(1000000));
free(test);

  return EXIT_SUCCESS;
}
Avatar billede arne_v Ekspert
24. februar 2003 - 16:09 #10
Lidt anden problem-stilling.

Det er en "dum" malloc. En fejl i C RTL. Men hvis
memory allokeret af et program ikke bliver releaset ved
program exit, så er det en operativ-systems fejl.

Iøvrigt af nysgerrighed: hvilket OS har problemer med at
genbruge memory i malloc ?
Avatar billede stringbuffer Nybegynder
25. februar 2003 - 01:02 #11
Bare en sidebemærkning.
Har en underlig erfaring med linux - når man i et loop allokerer og frigør en masse hukommelse, så ser det ud som om hukommelsen stadig er "besat" efter sidste gennemløb af løkken - men der er ingen memory leaks, da f.eks. 100000 gennemløb giver samme memory forbrug som 1 gennemløb, og der er ingen statiske variable eller funktioner.
Avatar billede arne_v Ekspert
25. februar 2003 - 08:17 #12
stringbuffer>

Der er der ikke noget udnerligt i.

Mange (formentlig de fleste) C RTL/OS kombinationer
kører med en 2 layer allokering.

Du malloc'er 1 MB.

C RTL beder OS om 1 MB.

Du free'er de 1 MB.

C RTL beholder de 1 MB men putter dem bare på en free list.

Du malloc'er 1 MB.

C RTL giver dig 1 MB uden at spørge OS.

Du free'er de 1 MB.

C RTL beholder de 1 MB men putter dem bare på en free list.

Set fra OS er der stadig allokeret 1 MB til din process.
Avatar billede segmose Nybegynder
25. februar 2003 - 09:00 #13
Stringbuffer's ogArne's ovenstående beskrivelse er den korrekte
måde at virke på for en C implementation.

Den skal kræver at du kan genallockere frigivet hukommelse, hvilket
der ikke var (er der det nu?) i windows, hvor frigivet hukommelse
bliv stillet til rådighed for andre programmer før program terminering
hvilket gjorde at den anden allockering kunne fejle fordi virtuel
hukommelse i mellemtiden var opbrugt.
Avatar billede bundgaard Nybegynder
06. marts 2003 - 21:32 #14
okay..hva er der gået galt her? :/

kan ikke se noget tekst
Avatar billede soreno Praktikant
06. marts 2003 - 21:34 #15
Fejl i ekspertens database - det virker sikkert (forhåbentlig..) igen imorgen.
Avatar billede stringbuffer Nybegynder
06. marts 2003 - 21:59 #16
LOL, hvad var spørgsmålet?
Avatar billede bundgaard Nybegynder
10. marts 2003 - 08:36 #17
stadig ingen forbedringer :(

men spørgsmålet gik på et lille program jeg havde bikset sammen..hva fejlen var osv :)

fik et svar..men kan ikke huske hvem der gav mig det :D
Avatar billede bundgaard Nybegynder
04. april 2003 - 08:43 #18
ingen der vil svare?
Avatar billede arne_v Ekspert
04. april 2003 - 08:56 #19
Det var vel Erik der løste dit problem, men han er vist ret svær at få
til at ligge et svar for tiden.
Avatar billede bundgaard Nybegynder
07. april 2003 - 14:59 #20
hmm, det har du vist ret i :)
Avatar billede bundgaard Nybegynder
23. juli 2003 - 20:32 #21
hmmm lukker her..

sig til hvis der er nogen der føler sig uretfærdigt behandlet, så opretter jeg et spørgsmål til vedkommende :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester