What does the Sys_PageIn() function do in Quake?
Posted
by
Philip
on Game Development
See other posts from Game Development
or by Philip
Published on 2012-06-13T21:04:48Z
Indexed on
2012/10/30
23:21 UTC
Read the original article
Hit count: 135
I've noticed in the initialization process of the original Quake the following function is called.
volatile int sys_checksum;
// **lots of code**
void Sys_PageIn(void *ptr, int size)
{
byte *x;
int j,m,n;
//touch all memory to make sure its there. The 16-page skip is to
//keep Win 95 from thinking we're trying to page ourselves in (we are
//doing that, of course, but there's no reason we shouldn't)
x = (byte *)ptr;
for (n=0 ; n<4 ; n++)
{
for (m=0; m<(size - 16 * 0x1000) ; m += 4)
{
sys_checksum += *(int *)&x[m];
sys_checksum += *(int *)&x[m + 16 * 0x10000];
}
}
}
I think I'm just not familiar enough with paging to understand this function. the void* ptr passed to the function is a recently malloc()'d piece of memory that is size bytes big. This is the whole function - j is an unreferenced variable. My best guess is that the volatile int sys_checksum is forcing the system to physically read all of the space that was just malloc()'d, perhaps to ensure that these spaces exist in virtual memory? Is this right? And why would someone do this? Is it for some antiquated Win95 reason?
© Game Development or respective owner