Gå til innhold

Anbefalte innlegg

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 av simster
Lenke til kommentar
Videoannonse
Annonse

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 av JAPCU
Lenke til kommentar
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

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
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
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 av _vamecum
Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...