std::unordered_map<int,...>
이 대략 동일한 크기를 유지하지만 항목을 계속 추가하고 제거하는 경우 지속적으로 메모리를 할당하거나 해제하거나 메모리를 캐시하고 다시 사용합니다 (예 : 풀 또는 벡터). 현대 표준 MS 구현 라이브러리를 가정합니다.unordered_map을 사용할 때의 메모리 할당
답변
표준은 이러한 측면에 대해 구체적이지 않으므로 구현 정의됩니다. 가장 중요한 점은 사용자가 설명하는 캐싱 동작은 보통 사용자 지정 할당 자 (예 : memory pool allocator)을 사용하여 수행되므로 일반적으로 컨테이너 구현과 분리해야합니다. 정렬되지 않은 용기의 약 the standard, ~p874
관련 비트 : 정렬되지 않은 결합 용기
요소는 버킷으로 구성된다. 동일한 해시 코드가있는 키는 동일한 버킷에 나타납니다. 버킷 수는 요소가 비 순차적 연관 컨테이너에 추가 될 때 자동으로 증가하므로 버킷 당 평균 개의 요소 수가 경계 아래에 유지됩니다.
삽입 :
인서트 및 부재 반복자의 유효성에 영향을 미치지 아니한다 설치하다 경우 (N + N)의 N이 의 원소의 개수 < = Z의 *의 B, 삽입 작업 전에 용기는, N 원소 삽입의 수는, B는 컨테이너의 버킷 카운트이고, Z는 컨테이너 최대 하중 인자
라인 사이를 읽을 수 있고 반복자 유효성이 영향을받지 않기 때문에 아마 메모리 할당이 일어나지 않는다고 가정합니다. 이것이 보장되는 것은 아니지만 (예 : 버킷 데이터 구조가 연결된 목록 인 경우 반복자를 무효화하지 않고 추가 할 수 있음). 표준은 요소가 제거 될 때 일어날 일을 지정하지 않는 것 같지만, 위의 제약 조건을 무효화 할 수 없으므로 메모리를 할당 해제 할 이유가 보이지 않습니다.
특정 구현을 위해 가장 쉬운 방법은 소스를 읽거나 코드를 프로파일 링하는 것입니다. rehash
및 resize
메서드를 사용하고지도의 load_factor를 조정하여이 동작을 제어 할 수 있습니다 (필요한 경우).
- 1. 바인딩을 사용할 때의 메모리 사용
- 2. CLLocationCoordinate2D를 사용할 때의 메모리 누수
- 3. UIImagePickerController를 사용할 때의 메모리 경고
- 4. CWLSynthesizeSingleton.h를 사용할 때의 메모리 문제
- 5. Three.js : 많은 텍스처를 사용할 때의 메모리 관리
- 6. ORM을 사용할 때의 PHP 성능 및 메모리
- 7. 메모리 할당
- 8. 내 코드에서 std :: unordered_map을 사용할 수 없습니다.
- 9. 동적 메모리 할당 대신 사용할 수 있습니까?
- 10. strtok() 함수를 사용할 때 메모리 할당
- 11. malloc 할당 메모리 시간을 사용할 수 있습니까?
- 12. 포인터 및 메모리 할당 구분
- 13. 메모리 할당
- 14. 메모리 할당
- 15. 메모리 할당
- 16. 메모리 할당
- 17. 할당 메모리
- 18. 메모리 할당
- 19. 할당 메모리
- 20. 메모리 할당
- 21. 메모리 할당
- 22. 메모리 할당
- 23. Calloc - 메모리 할당
- 24. 메모리 할당 및 구조화
- 25. 메모리 누출의 C/메모리 할당 ++
- 26. 메모리 할당과 동적 메모리 할당
- 27. 메모리 할당 가능 메모리 누수
- 28. 메모리 할당 및 해제 메모리
- 29. MIPS32 - 메모리 할당 해제
- 30. 템플릿 및 메모리 할당
구현의 소스 코드를 살펴보십시오. –
표준 컨테이너는 allocator 매개 변수를 사용하여 메모리를 관리합니다. 그들은 거기에서 사용 된 알고리즘을 추측해서는 안되며 재사용 가능한 메모리 블록의 추가적인 캐시를 보유해서는 안됩니다. –