현재 Windows에서 구현은 malloc()
입니다. 그러나 제 연구에서 나는 당황한 것을 발견했습니다 :Windows 메모리 할당 질문
먼저 API 레벨에서 windows는 주로 HeapAlloc()
및 VirtualAlloc()
호출을 사용하여 메모리를 할당합니다. Microsoft에서 구현 한 malloc()
(CRT에 포함 된 것 - C 런타임)은 기본적으로> 480 바이트 블록을 호출하고 작은 할당에서는 VirtualAlloc()
으로 할당 된 특수 영역을 관리하여 조각화를 방지하기 위해 here에서 수집합니다.
글쎄, 잘 됐어. 그러나 다른 구현 예는 malloc()
입니다. 예를 들어 nedmalloc은 Microsoft의 malloc
보다 최대 125 % 빠르다고 주장합니다.
왜 우리가 작은 블록
HeapAlloc()
를 호출 할 수이이 모든 날 몇 가지 궁금합니다? Does는 단편화와 관련하여 제대로 수행되지 않습니다 (예 : "best-fit"대신 "first-fit"을 수행).
- 사실, 다양한 API 할당 호출의 내용에 대해 알 수있는 방법이 있습니까? 그것은 매우 도움이 될 것입니다. 마이크로 소프트의
malloc
보다nedmalloc
훨씬 더 빠르게 만드는 것
- 사실, 다양한 API 할당 호출의 내용에 대해 알 수있는 방법이 있습니까? 그것은 매우 도움이 될 것입니다. 마이크로 소프트의
? 상기로부터
- , 나는
HeapAlloc()
/VirtualAlloc()
는 한 동안 한 번만 전화를 한 후 할당 된 메모리 자체를 관리하는 데 훨씬 더 빨리malloc()
에 대한 것을 너무 느리다는 인상을 받았습니다. 그 가정은 사실입니까? 또는 조각화 때문에malloc()
"래퍼"가 필요합니까? 이런 식의 시스템 호출이 빠르다고 생각할 것입니다. 적어도, 효율적으로 만들기 위해서는 약간의 생각이 들었을 것입니다.- 사실이라면 왜 그렇습니까? 평균적으로
은, 얼마나 많은 (아마도 이미 할당 된 세그먼트의 수의 함수) 전형적인
malloc
호출에 의해 메모리 (크기 순서가)/쓰기를 읽고 수행? 직관적으로 말하자면 평균적인 프로그램을 위해 수십 만 개가 넘는다는 말입니까?
"dlmalloc"을 읽는 것은 malloc 전략에 대해 매우 유익합니다. – Will