2013-10-21 2 views
0

나는 루프에서 4096 바이트 (4KB)를 할당하는 프로그램을 가지고 있고, 4 번째 반복 후에는 가상 메모리 크기가 16KB 증가한 것을 볼 수있다. 즉, 블록 크기가 16KB임을 의미합니다. 이것을 찾으려면 유닉스 명령은 무엇입니까? getconf PAGE_SIZE를 사용하여 4KB 인 페이지 크기를 얻을 수 있지만 블록 크기를 찾아야합니다.유닉스에서 가상 메모리 블록 크기를 찾는 방법

+1

이것은 할당 자 라이브러리의 세부 사항처럼 보입니다. [표준 Linux 페이지 크기] (http://stackoverflow.com/q/4888067/596781)는 4kB이지만 할당자는 아마 한 번에 더 큰 덩어리를 가져옵니다. –

답변

0

정상적인 구성에서 glibc을 사용한다고 가정하면 실제로 메모리 할당량이 한 번에 4KB 증가 할 것으로 예상됩니다. 하지만 크기를보기 위해 사용하는 도구가 그다지 작은 차이를 보이지 않을만큼 세밀하지는 않습니까?

분명히, 당신의 glibc가 내가 가진 소스와 다르게 설정되어있을 수도 있지만, 요청한 블록의 크기를 반올림하여 (sbrk을 통해 시스템 호출 brk을 호출합니다) 4킬로바이트 (정확한 출처 : size = (size + pagemask) & ~pagemask;은 곧 if (size > 0) brk = (char*)(MORECORE(size)); 다음 물론

, 당신이 x = malloc(4096);을 할 경우 malloc이 할당을 추적하기 위해 몇 가지 여분의 데이터를 필요로하기 때문에, 실제 할당, 4킬로바이트보다 큰 바이트의 작은 숫자 일 것이다. (현재 할당의 크기, 이전 할당의 크기 등) 전체 오버 헤드는 32 비트 시스템에서 sizeof (size_t) + 2 * sizeof (some pointer) = 16 바이트 이상입니다. 64 비트 시스템에서는 32 바이트입니다. 그 이상이 될 수도 있습니다.