Allokera jättemycket minne: Hur vet jag om det skrivs till disk eller inte? (C/C++ och Java)

Permalänk
Medlem

Allokera jättemycket minne: Hur vet jag om det skrivs till disk eller inte? (C/C++ och Java)

Hej!

Har ett program som ska läsa in X antal GB och göra lite beräkningar. Säg att jag har

Exempel: x = new int[10000...]; // Allokerar jättemycket minne

Frågan:

Hur vet jag när minnet läggs på disken? Går det att ta reda på var gränsen går? Eller finns det en flagga som säger "nu-skrivs-det-till-disken-istället".

Detta gäller främst C/C++ men även i Java.

Skulle uppskattas om någon kunde förklara kort hur minnesallokeringen fungerade (eller länka till en bra sida som gör det)

Tack på förhand!

Permalänk
Medlem

Har inget definitivt svar till dig men tror det är knegigt att implementera då OS:et flyttar runt saker mellan ram/disk bäst det vill.
Om det är en prestandagrej kanske det går att föra lite statistik på hastighet och dynamiskt allokera mindre minne om det verkar ge högre hastighet. Nog rätt pilligt även det att få till.

Visa signatur

Intel i7 4970K, Fractal define mini, 24GB DDR3 1600mhz , 500GB SSD * 2 RAID0, GeForce 1060 6gb

Permalänk
Medlem

Tror inte du kan direkt få reda på om du ligger o tuggar i pagefilen.

Program har inte direkt kontroll över var saker sparas, OS:et ger ett logiskt utrymme åt programmet som OS:et sedan håller koll på och mappar till fysiska minnet. Det lättaste sättet är nog att hålla koll på hastigheten.

Det finns sätt att kolla hur mycket minne du kan allokera(iaf i Java med https://docs.oracle.com/javase/10/docs/api/java/lang/Runtime.... och förmodligen något liknande i C++ iaf).

Permalänk
Medlem

Det går att allokera minne som non-pageable om man vill men det kräver mer arbete för programmeraren och det begränsar användaren då minnet blir låst till programmet. I windows kan du t ex använda Address Windowing Extensions(AWE) för att skapa sådana minnesområden.