Kezdőoldal » Számítástechnika » Programozás » [c program, malloc segitsegeve...

[c program, malloc segitsegevel]Program ami kiírja mennyi megabyte-t tudott lefoglalni?

Figyelt kérdés
2012. jan. 7. 14:27
 1/8 anonim ***** válasza:

Mi a kérdésed? Segítek szívesen, de ne várd el hogy megírják neked.


Kezdetnek:

[link]

2012. jan. 7. 14:50
Hasznos számodra ez a válasz?
 2/8 anonim ***** válasza:

segitség:

4 bájt mallocolása : malloc( 4 );

1 MB mallocolása : malloc( 1000 );

Ez kell egy for ciklusba. amikor sikeres a malloc, akkor a ciklus változóba ++.

Végén az a változód tartalmazza a MB-ok számát.

Megvalósítást már tényleg rád bízom.

2012. jan. 7. 15:12
Hasznos számodra ez a válasz?
 3/8 A kérdező kommentje:

Köszönöm.


Nem tudom,hogy így jó-e de ez sikerult:



#include <stdio.h>

#include <stdlib.h>


#define MB 1024


int main () {

int *p,i=0;


while(p != NULL){

p = (int*)malloc(MB);

i++;

}

free(p);

printf("Lefoglalt memoria %d\n",i);


return 0;


}

2012. jan. 7. 15:36
 4/8 _Jessy_ ***** válasza:
1 MB 1024 bájt lenne? Hol tanultatok programozni? Bölcsészkaron?!?
2012. jan. 7. 19:16
Hasznos számodra ez a válasz?
 5/8 _Jessy_ ***** válasza:

1 MB mallocolása : malloc( 1000 );

Na ez meg főleg kiverte a biztosítékot :D Szóval a kérdésre is válaszolva:

Ha elkezded a memóriát foglalni, mint az őrült, akkor felzabálja az összeset, és összeomlik a windows, ezért javaslom, hogy ha nem fontos a pontosság, akkor foglalj minden lépésben 64MB-ot, így az utolsó sikertelen foglalás után még marad annyi memóriád, hogy ne omoljon össze a rendszer. A másik pedig, hogy a végén a memfree -vel csak a legutolsóként lefoglalt területet szabadítod fel. Ha itt véget ér a program akkor felesleges is, mert úgyis felszabadul az összes foglalt memória, ha pedig nem ér véget, akkor valahogy gondoskodni kellene arról, hogy szabadítsa fel az összes foglalt memóriát.

2012. jan. 7. 19:34
Hasznos számodra ez a válasz?
 6/8 A kérdező kommentje:
Nem tudom....., viszont akkor helyesen hogyan néz ki a progi?
2012. jan. 7. 22:16
 7/8 anonim ***** válasza:
Először is, a malloc függvénynek bájtban adjuk meg a paraméterét, azaz malloc(1024*1024) lesz 1 MB. Ha típus (pl. int) segítségével foglalsz, az 32biten 4 bájtot foglal, ezért ennek a negyede lesz foglaláskor. Másodszor a legegyszerűbb, ha dinamikusan foglalsz memóriát, akkor kvázi csak a RAM mennyiségétől függ, hogy mennyit foglalhatsz le, mínusz ugye az oprendszernek és az alkalmazásoknak fenntartott mennyiség. Egyébként szakmai körökben azt mondják, hogy egy normál program esetében ez olyan 2GB, de ez csak az alap és nem szentírás.
2012. jan. 7. 22:32
Hasznos számodra ez a válasz?
 8/8 _Jessy_ ***** válasza:

pl. én így oldottam meg, nem túl hatékony, de nem hagy maga után "szemetet":

#include <stdio.h>

#include <stdlib.h>

#include <memory.h>


#define MB (1 << 20)


int main()

{

int i = 0;

void *p;

for(;;i+=MB){

p = malloc(i);

if(!p){

break;

}

free(p);

}

printf("Sikeresen foglalt: %f MB!\n", (float)i / MB);

return 0;

}

2012. jan. 7. 23:21
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!