ukjentbrukergitt Skrevet 23. oktober 2007 Del Skrevet 23. oktober 2007 (endret) Jeg vil gjerne lage et lite program som vil lage en minne lekasje, på en måte, jeg vil at programmet skal bruke alt minnet slik at det ikke er mer å ta av, hvordan gjør jeg det? kan noen gi meg en kilde til det? ihvertfall gi meg litt info om hvordan malloc fungerer, ikke helt fått med meg det enda det skal være i c++ Endret 25. oktober 2007 av simster Lenke til kommentar
ukjentbrukergitt Skrevet 23. oktober 2007 Forfatter Del Skrevet 23. oktober 2007 42? Lenke til kommentar
Mr.Garibaldi Skrevet 23. oktober 2007 Del Skrevet 23. oktober 2007 Hva skal du bruke dette programmet til? Virker ikke helt som ett program du har helt edle hensikter med... Og btw: malloc() er c, ikke c++... Lenke til kommentar
ukjentbrukergitt Skrevet 23. oktober 2007 Forfatter Del Skrevet 23. oktober 2007 vil se om jeg klarer å kræsje maskinen ved å bruke opp alt minnet imed at page filen blir fylt opp, altså harddisken, hva bruker man istedet for malloc da? ikke rart jeg ikke fant noe da Lenke til kommentar
Mr.Garibaldi Skrevet 23. oktober 2007 Del Skrevet 23. oktober 2007 (endret) Vil anbefale deg å ta en titt her, der er det en god oversikt over alle standard kommandoer i C/C++. Ta en titt på new, legg den i en for-loop og du skulle få ønsket resultat... Men ikke bruk det på andres maskiner... Endret 23. oktober 2007 av Mr.Garibaldi Lenke til kommentar
JAPCU Skrevet 23. oktober 2007 Del Skrevet 23. oktober 2007 (endret) Jeg lagde ett sånt program for noen dager siden. Morsomt. Trykk CTRL-ALT-DEL ->Oppgavebehandling for å sjekke minnebruken. Dette programmet setter av plass til to tabeller som kan inneholde heltall. Hver på 1MB hver. Dette kan sjekkes med oppgavebehandling. Du kan bruke opp minne på to måter. Det vanlige er ved bruk av "fast" data. Variabler. F.eks int tabell[100] kommer til å ta opp 4 byte * 100 = 400 byte minne. Kalles å sette data på "stack". Ting du setter på "stacken" blir slettet når de ikke trengs lenger. F.eks if(true) { int mittTall = 5; } Her blir mittTall slettet igjen. Da den er ute av "scope". Den andre måten er å gjøre det dynamiskt vha. new operatoren int *ptr = new int[100]; Dette kan gjøres mens programmet kjører. Kalles å sette av plass på "heap". //en int tar 4 bytes minne (egentlig avhengig av datamaskinen) //1024 * 1024= 1048576 (1MB) #include <iostream> const int MB = 1024*1024; const int storrelse =(MB*10)/4; // deler på 4 fordi fordi 1 int tar 4 byte struct data { int tabell[storrelse]; // }; class data2 { public: data2() //Constructor. Kjøres naar ett nytt objekt lages { int *pekerTil = new int[storrelse]; } ~data2() //Destructor { //her settes koden som frigir minne. } }; int main(void) { data *minStruct=new data; //Lager ny struct minStruct->tabell[0]=10; data2 *minKlasse=new data2; //Lager ny klasse std::cin.get(); return 0; } Endret 23. oktober 2007 av JAPCU Lenke til kommentar
ukjentbrukergitt Skrevet 24. oktober 2007 Forfatter Del Skrevet 24. oktober 2007 nice! takk, lærte noe samtidig og greier, mange takk! Lenke til kommentar
Dj_Offset Skrevet 24. oktober 2007 Del Skrevet 24. oktober 2007 Jeg vil gjerne lage et lite program som vil lage en minne lekasje, på en måte, jeg vil at programmet skal bruke alt minnet slik at det ikke er mer å ta av, hvordan gjør jeg det? kan noen gi meg en kilde til det? ihvertfall gi meg litt info om hvordan malloc fungerer, ikke helt fått med meg det enda det skal være i c++ for (;;) new char[1024]; Den skulle gjøre susen. Spiser minne 1kb av gangen, helt til programmet blir avsluttet. Mulig at maskinen din får litt "vondt" av det, men OSet ditt dreper nok programmet til slutt vil jeg tro... Lenke til kommentar
Garanti Skrevet 24. oktober 2007 Del Skrevet 24. oktober 2007 I oppgavebehandling blir minnebruken til prosessen stående på 648 K Lenke til kommentar
GeirGrusom Skrevet 25. oktober 2007 Del Skrevet 25. oktober 2007 Husk at et program ikke kan allokere mer en ca 3GB RAM på en 32-bit prosessor, så ikke se på det som en garanti at det får maskinen til å kræsje, men det får sikkert maskinen til å gå helt sirup. Skru av pagefile, så kommer den til slutt til et punkt der alle programmer som ikke er systemkritisk blir avsluttet. Lenke til kommentar
Dead_Rabbit Skrevet 25. oktober 2007 Del Skrevet 25. oktober 2007 Kanskje det kan omgås om man forker programmet...? (Altså 3GB pr. prosess?) Lenke til kommentar
Mr.Garibaldi Skrevet 25. oktober 2007 Del Skrevet 25. oktober 2007 Bortsett fra at fork ikke finnes i windows. Men det er en spennende tanke og høres jo sannsynlig ut. Noen som har tid og lyst til å teste? (Skulle gjort det selv, men har dessverre ikke tid) Lenke til kommentar
Dead_Rabbit Skrevet 26. oktober 2007 Del Skrevet 26. oktober 2007 Vel, man bør vel få samme effekten om man bruker CreateProcess, vil jeg tro. Altså at programmet i seg selv er rekursivt og starter seg selv. Lenke til kommentar
kyrsjo Skrevet 1. november 2007 Del Skrevet 1. november 2007 Men: Er det sant at om et program avslutter i windows uten å kalle på delete [] ptr; så blir minnet aldri frigitt? Lenke til kommentar
Giddion Skrevet 1. november 2007 Del Skrevet 1. november 2007 Men: Er det sant at om et program avslutter i windows uten å kalle på delete [] ptr; så blir minnet aldri frigitt? nei, minne blir frigjort når programmet avslutter (i windows og de fleste andre OSer), men system resurser som f. eks. åpne file og sockets er det ingen garanti på men de blir nok fjernet de også. DLL filer har etter det jeg har lest en forsinkelse på 30min før de blir helt fjernet, men det dreier seg ikke om mye minne. Lenke til kommentar
_vamecum Skrevet 4. november 2007 Del Skrevet 4. november 2007 er det ikke 4GB per proc? 2³² Lenke til kommentar
GeirGrusom Skrevet 4. november 2007 Del Skrevet 4. november 2007 Teknisk sett ja, men praktisk sett har du rundt 3 Gb på grunn av hardware adresser. Men tar jeg ikke helt feil, har 32-bit programmer 4 GB tilgjengelig i 64-bit OS, ihvertfall Windows. Lenke til kommentar
LostOblivion Skrevet 5. november 2007 Del Skrevet 5. november 2007 Per definisjon: 1 kB = 1000 B. 1 kiB = 1024 B. Lenke til kommentar
_vamecum Skrevet 6. november 2007 Del Skrevet 6. november 2007 (endret) Teknisk sett ja, men praktisk sett har du rundt 3 Gb på grunn av hardware adresser. Men tar jeg ikke helt feil, har 32-bit programmer 4 GB tilgjengelig i 64-bit OS, ihvertfall Windows. Ja om det er kompilert med 32-bit, så kjører det jo i 32-bit mode. Endret 6. november 2007 av _vamecum Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå