malloc()을 사용하여 50MB의 메모리를 할당 한 후 모든 페이지를 "만지기"위해 루프를 사용하여 소규모 c 프로그램을 만들었습니다. 프로세스의 상주 메모리가 증가하지만 주요 페이지 오류가 없음
int main()
{
// Map 50M to RAM
unsigned char *p = malloc(52428800);
sleep(5);
// Touch every page
for (int i = 0; i< 52428800; i+=4096)
p[i] = 1;
sleep(100000);
}
는 실제로 프로그램은 첫 번째 오초 수면 후 "top 명령"출력 시작에 상주 메모리가 채워 것을 의미하고 결국 RAM의 모든 가상 메모리를 할당 작동하는 것 같다.
PID %MEM VIRT RES CODE DATA SHR
32486 0.6 55396 52360 4 51528 1104
나는 프로그램의 페이지 오류를 발견하고 사소한 것들에만있다 :
ps -ef -o min_flt,maj_flt 32486
MINFL MAJFL
12879 0
가 주요 페이지 오류 있어야하지 않나요은? 내가 아는 한 malloc()을 사용할 때 50Mb의 가상 주소 공간이 생성됩니다. 각 가상 페이지에 대한 이전 글은 실제 거주 크기가 매우 작지만 after는 요청 된 가상 메모리와 같습니다.
페이지를 "만지"면 (페이지를 만지기 위해) 각 페이지가 디스크에서 DRAM으로 이동합니다. 맞습니까? 왜 주요 페이지 결함이없는거야?
또한 malloc()을 50m로 설정하고 거주 크기를 알았을 때 몇 킬로바이트 만 남았는데 나머지 페이지는 어디에 있습니까? 그들은 디스크에 있습니까?