malloc이 필요한 것보다 더 많은 메모리를 할당하는 이유는 무엇입니까?

malloc이 필요한 것보다 더 많은 메모리를 할당하는 이유는 무엇입니까?

사용할 때 요청이 있을 때에도 함수가 항상 최소값을 할당한다는 것을 발견했습니다 malloc(). 왜 그렇게 많은 메모리가 할당됩니까? 메모리 크기를 할당할 수 있습니다 . 페이지 블록 크기가 .sbrk()malloc()135168 bytes1 bytemalloc()4 kB4 kB

임계값이 사용된 이후 이기 때문에 128 * 1024 = 131072 bytes대신 할당하면 안 되나요 ?135168 bytes128 kBmmap()

고민됩니다. 나는 의 내부 작동 방식을 깊이 이해하지 못합니다 malloc().

당신의 도움을 주셔서 감사합니다.

답변1

이것은 순전히 최적화입니다. malloc()을 한 번 사용하면 여러 번 사용할 것으로 추측됩니다. 따라서 프로세스 공간을 확장하기 위한 초기 시스템 호출이 있습니다(이는 가상 주소 매핑에 영향을 미치며 상대적으로 비용이 많이 듭니다).

요청한 금액은 이 영역에서 가져오고 해당 주소는 malloc() 호출에서 반환됩니다. 나머지는 사용 가능 목록(처음에는 비어 있음)에 추가됩니다.

stdio를 사용하는 경우(예: sbrk()의 초기 값 인쇄) stdio는 표준 출력을 위해 FILE*에서 사용하는 버퍼에 대한 첫 번째 malloc()(사용 가능 목록에서 사용자 고유의 malloc(1))을 생성하게 됩니다.

mmap()은 대규모 단일 할당에만 사용됩니다. 소규모 할당은 쉽게 분할할 수 있는 사용 가능한 목록 영역을 사용합니다.

관련 정보