[ dagree @ 30.04.2006. 01:04 ] @
Imamo sledeci C fajl:

Code:

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

void main(){

long float *a;
a=(long float*)malloc(2621440*sizeof(long float));
long float i;
for (i=0; i<2621440; i++) { a[i]=i; }

char k;
scanf (&k);
free(a);

}



Znaci alociramo prostor od 2621440*8B=20MB i zatim ga popunimo. Medjutim kada se program startuje, posmatrano iz Windows Task Manager-a (odeljak PF usage), memorija kao da se uopste ne puni. Dakle moje pitranje je sta se dasava sa ovih 20MB tj. gde se oni smestaju?
[ X Files @ 30.04.2006. 08:53 ] @
Kod mene ovaj kod (malo modifikovan) radi onako kako ocekujes, tj. lepo se vidi
kako od RAM-a uzme 20-tak MB rama i nakon toga ih vrati.

Inace, posto sam ja staromodan tip i ne znam cemu sluzi long float, koristio sam
double.

Code:

// ...
#include <stdio.h>
#include <stdlib.h>
#include <dos.h>
// ...
double *a;
a = ( double* ) malloc ( 2621440 * sizeof( double ) );

long i;
for ( i=0; i<2621440; i++ )
{
   a[ i ] = (double)i;
}
_sleep( 5 );
free( a );
// ...

[ dagree @ 30.04.2006. 22:52 ] @
Isto se desava. Procesor je i dalje 100% iskoriscen, ali PF Usage ni da mrdne. Jedino sto se memorija napuni za nekih 2MB ali to potice od ntvdm.exe koji se koristi za pokretanje fajla. Ne bi trebalo da je do kompajlera...koristim bc.
[ X Files @ 01.05.2006. 08:50 ] @
Kod mene je kompajler koji ide uz Borland C++ Builder 6, i lepo se vidi kako se PF Usage
poveca za tih 20 MB i nakon 5 sekundi ih vrati.
[ X Files @ 01.05.2006. 17:42 ] @
Meni je sumnjivo to (pre)opterecenje procesora od 100%. To se ne bi smelo dogoditi sa
kodom koji si prikazao. Koliko imas RAM-a? Ja na ovoj masini imam 512MB i lepo vidim
kako kako se PF sa 289 pomeri na 309, pa opet nakon 5 sekundi na 289. Svo vreme je
opterecenje procesora oko 1-2 %.
[ Mali Misha @ 01.05.2006. 18:59 ] @
I meni je opterecenje CPU jako malo. A PF zauzece se primeti.

Neprikazivanje zauzeca memorije sledi obicno ako je interval jako kratak ili verovatno ako je i procesor dosta zauzet. A samo zauzece bi moglo biti od tog frekventnog for-a, ako je CPU slabiji.

Lupam... probaj da postavis _sleep( 5 ); na _sleep( 5000 ); . Kod mene prvi pravi pauzu od samo 5ms.
[ X Files @ 01.05.2006. 19:10 ] @
Citat:

@Mali Misa
Kod mene prvi pravi pauzu od samo 5ms.


Hm... Bas Ĩudno. Ovo je iz Borland-ovog C Runtime Library Helpa:

Citat:

Header File
dos.h

Category
Process Control Routines

Prototype
void _sleep(unsigned seconds);

Description
Suspends execution for an interval (seconds).

With a call to _sleep, the current program is suspended from execution for the number of seconds
specified by the argument seconds. The interval is accurate only to the nearest hundredth of a
second or to the accuracy of the operating system clock, whichever is less accurate.

Return Value
None.


Inace, tacno je i da ako je procesor opterecen 100% radi necega, verovatno ne moze tacno i brzo
da obavesti o promenama zauzete memorije.
[ Mali Misha @ 01.05.2006. 19:32 ] @
Sorry, ja sam na MS VC++ 6.0. :) Bcc32-ov _sleep radi sa sekundama.