OK... dzięki za informację (doszedłem do tego korzystając z help'a - dobra rzecz).
Napisałem taki oto programik:
void __fastcall TForm1::FormCreate(TObject *Sender)
{
_MEMORYSTATUS obiekt, *wskaznik;
int *p;
wskaznik = &obiekt;
wskaznik->dwLength = sizeof(MEMORYSTATUS);
GlobalMemoryStatus(wskaznik);
ListBox1->AddItem("Wolna pamięć operacyjna (psychiczna): "+IntToStr(wskaznik->dwAvailPhys/1048576)+ "Mb" ,ListBox1);
ListBox1->AddItem("Wolna pamięć operacyjna (wirtualna): "+IntToStr(wskaznik->dwAvailVirtual /1048576)+ "Mb" ,ListBox1);
if ((p=(int *)malloc(104857600))!=NULL)
{
ListBox1->AddItem("Zaalokowałem 100Mb pamięci poprawnie...",ListBox1);
GlobalMemoryStatus(wskaznik);
ListBox1->AddItem("Wolna pamięć operacyjna (psychiczna): "+IntToStr(wskaznik->dwAvailPhys/1048576)+ "Mb" ,ListBox1);
ListBox1->AddItem("Wolna pamięć operacyjna (wirtualna): "+IntToStr(wskaznik->dwAvailVirtual /1048576)+ "Mb" ,ListBox1);
free(p);
ListBox1->AddItem("Zwolniłem pamięć operacyjną..." ,ListBox1);
GlobalMemoryStatus(wskaznik);
ListBox1->AddItem("Wolna pamięć operacyjna (psychiczna): "+IntToStr(wskaznik->dwAvailPhys/1048576)+ "Mb" ,ListBox1);
ListBox1->AddItem("Wolna pamięć operacyjna (wirtualna): "+IntToStr(wskaznik->dwAvailVirtual /1048576)+ "Mb" ,ListBox1);
}
}
Kiedy go uruchamiam mam takie wyniki:
Wolna pamięć operacyjna (psychiczna): 305Mb
Wolna pamięć operacyjna (wirtualna): 2011Mb
Zaalokowałem 100Mb pamięci poprawnie...
Wolna pamięć operacyjna (psychiczna): 305Mb
Wolna pamięć operacyjna (wirtualna): 1911Mb
Zwolniłem pamięć operacyjną...
Wolna pamięć operacyjna (psychiczna): 305Mb
Wolna pamięć operacyjna (wirtualna): 2011Mb
Wynika z tego, że funkcja malloc() chcąc przydzielić 100Mb, w tym przypadku robi to w pamięci wirtualnej a nie tej... psychicznej (fizycznej?).
Dlaczego tak jest?
Czym różni się pamięć fizyczna od psychicznej?
Pozdrawiam [soczek]