사용할 때 요청이 있을 때에도 함수가 항상 최소값을 할당한다는 것을 발견했습니다 malloc()
. 왜 그렇게 많은 메모리가 할당됩니까? 메모리 크기를 할당할 수 있습니다 . 페이지 블록 크기가 .sbrk()
malloc()
135168 bytes
1 byte
malloc()
4 kB
4 kB
임계값이 사용된 이후 이기 때문에 128 * 1024 = 131072 bytes
대신 할당하면 안 되나요 ?135168 bytes
128 kB
mmap()
고민됩니다. 나는 의 내부 작동 방식을 깊이 이해하지 못합니다 malloc()
.
당신의 도움을 주셔서 감사합니다.
답변1
이것은 순전히 최적화입니다. malloc()을 한 번 사용하면 여러 번 사용할 것으로 추측됩니다. 따라서 프로세스 공간을 확장하기 위한 초기 시스템 호출이 있습니다(이는 가상 주소 매핑에 영향을 미치며 상대적으로 비용이 많이 듭니다).
요청한 금액은 이 영역에서 가져오고 해당 주소는 malloc() 호출에서 반환됩니다. 나머지는 사용 가능 목록(처음에는 비어 있음)에 추가됩니다.
stdio를 사용하는 경우(예: sbrk()의 초기 값 인쇄) stdio는 표준 출력을 위해 FILE*에서 사용하는 버퍼에 대한 첫 번째 malloc()(사용 가능 목록에서 사용자 고유의 malloc(1))을 생성하게 됩니다.
mmap()은 대규모 단일 할당에만 사용됩니다. 소규모 할당은 쉽게 분할할 수 있는 사용 가능한 목록 영역을 사용합니다.