Ik wil een DLL maken die wat array's gaat bewerken. Deze array's kunnen aardig lang zijn en daar moet je denken aan groottes van ruim 10 miljoen posities en veel groter.
Bij een functie in de DLL geef ik dan de pointer naar de array en de lengte van de array mee.
Het is dus zo dat als ik een array heb van 10 miljoen posities van het type integer (32 bit dus), het pointeradres moet gebruiken om positie 0 uit te lezen. Voor locatie 1 gebruik ik het pointeradres + 4. Voor locatie 2 het adres + 8 en zo verder.
Nu kan ik mij goed voorstellen dat bij grote array's, die dus veel geheugen nodig hebben, geen aaneengesloten stuk geheugen gereserveerd kan worden.
Hoe gaat Windows hier mee om? En moet ik er rekening mee houden dat een array op een ander adres verder gaat?
Met het zoeken op internet heb ik hier geen antwoord op gevonden. De meeste resultaten gaan over basis van een array meegeven en pointers zelf. Ook de array's zijn daar ook niet zo groot.
Ik heb het vermoeden dat Windows een virtuele geheugenbank heeft die ergens diep in Windows naar het echte geheugen verwijst. De pointer die programmeurs gebruiken zouden dan verwijzen naar de virtuele geheugenbank.
Over deze theorie heb ik niets gevonden die het bovenstaande kan bevestigen of ontkennen.
Ik wil uiteindelijk dus weten of ik arraypositie 9.999.999 gewoon kan uitlezen op pointeradres + 9.999.999 * 4 en of Windows dat doet op de manier die ik heb beschreven of juist totaal anders.
Bij een functie in de DLL geef ik dan de pointer naar de array en de lengte van de array mee.
Het is dus zo dat als ik een array heb van 10 miljoen posities van het type integer (32 bit dus), het pointeradres moet gebruiken om positie 0 uit te lezen. Voor locatie 1 gebruik ik het pointeradres + 4. Voor locatie 2 het adres + 8 en zo verder.
Nu kan ik mij goed voorstellen dat bij grote array's, die dus veel geheugen nodig hebben, geen aaneengesloten stuk geheugen gereserveerd kan worden.
Hoe gaat Windows hier mee om? En moet ik er rekening mee houden dat een array op een ander adres verder gaat?
Met het zoeken op internet heb ik hier geen antwoord op gevonden. De meeste resultaten gaan over basis van een array meegeven en pointers zelf. Ook de array's zijn daar ook niet zo groot.
Ik heb het vermoeden dat Windows een virtuele geheugenbank heeft die ergens diep in Windows naar het echte geheugen verwijst. De pointer die programmeurs gebruiken zouden dan verwijzen naar de virtuele geheugenbank.
Over deze theorie heb ik niets gevonden die het bovenstaande kan bevestigen of ontkennen.
Ik wil uiteindelijk dus weten of ik arraypositie 9.999.999 gewoon kan uitlezen op pointeradres + 9.999.999 * 4 en of Windows dat doet op de manier die ik heb beschreven of juist totaal anders.
Speel ook Balls Connect en Repeat