나는 루프에서 4096 바이트 (4KB)를 할당하는 프로그램을 가지고 있고, 4 번째 반복 후에는 가상 메모리 크기가 16KB 증가한 것을 볼 수있다. 즉, 블록 크기가 16KB임을 의미합니다. 이것을 찾으려면 유닉스 명령은 무엇입니까? getconf PAGE_SIZE를 사용하여 4KB 인 페이지 크기를 얻을 수 있지만 블록 크기를 찾아야합니다.유닉스에서 가상 메모리 블록 크기를 찾는 방법
0
A
답변
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 바이트입니다. 그 이상이 될 수도 있습니다.
이것은 할당 자 라이브러리의 세부 사항처럼 보입니다. [표준 Linux 페이지 크기] (http://stackoverflow.com/q/4888067/596781)는 4kB이지만 할당자는 아마 한 번에 더 큰 덩어리를 가져옵니다. –