당신에게 좋은 대답을 줄 수는 없다는 것을 알지 못하지만 네 자신의 메모리를 관리하면 (대개 큰 블록을 할당하고 그 큰 블록에서 자신의 할당을함으로써) 일반과 관련된 높은 비용을 피할 수 있습니다 범용 메모리 관리자. 예를 들어, Windows에서 많은 작은 할당은 무릎에 성능을 가져올 것입니다. 기존의 구현은 거의 모든 유형의 메모리 관리자에 대해 존재하지만 정확히 어떤 종류의 것을 요구하고 있는지 확실하지 않습니다 ...
Windows에서 프로그래밍 할 때 malloc/free를 호출하는 것이 성능면에서 거의 죽음과 같습니다. 일괄 처리로 메모리 할당을 상각하는 모든 인앱 메모리 할당은 할당/해제 할 때 프로세서 시간을 절약 할 수 있으므로 기본 할당자를 호출하지 않는 한 사용하는 방식이 그다지 중요하지 않을 수 있습니다.
This 엄격 슬래브 관리자 아니지만, 그것은 좋은 균형을 달성하기 위해 보인다 일반적으로 사용됩니다
말했다되는 것을 여기에 몇 가지 간단한 멀티 스레딩 - 순진한 생각이다.
필자는 종종 동일한 크기의 메모리 블록에 대해 구현하기가 매우 간단한 메모리 재사용 관리자를 사용합니다. 고정 된 크기의 사용되지 않은 메모리 목록을 유지 관리하고 새로운 블록을 할당합니다. 메모리가 필요할 때. 여기에있는 트릭은 링크 목록에 대한 포인터를 사용하지 않는 메모리 블록에 저장하는 것입니다. 이렇게하면 4 바이트의 매우 작은 오버 헤드가 생깁니다. 전체 프로세스는 메모리를 재사용 할 때마다 O (1)입니다. 메모리를 할당해야 할 때 슬래브 할당자를 호출합니다 (그 자체는 자명합니다).
순수 할당 전용 슬래브 할당 자의 경우 시스템에 많은 양의 메모리를 할당하고 아직 사용하지 않은 공간 (사용하지 않은 영역의 시작 부분과 끝 부분에 대한 포인터를 유지하십시오). 요청 된 크기를 할당 할 공간이 충분하지 않으면 새 슬랩을 할당하십시오. 큰 청크의 경우 시스템 할당 자로 전달하십시오.)
이러한 접근 방식을 연결하는 데 문제가 있습니까? 응용 프로그램은 메모리를 전혀 사용하지 않지만 성능이 중요한 응용 프로그램은 종종 원샷 처리 응용 프로그램이거나 같은 크기의 많은 개체를 만든 다음 사용을 중단합니다.
위의 방법을 사용하면 원자 적 연산만으로도 멀티 스레드를 쉽게 사용할 수 있습니다.
광산을 확인하십시오. https://github.com/bbu/Userland-slab-allocator –
@BlagovestBuyukliev : 감사합니다. 내 SLAB를 구현하면 매우 유용 할 것입니다. 일부 아이디어는 intresting이고 나는 메모리 관리에 너무 강하지 않아 도움이 될 것입니다. –
+1 메모리 관리를 인식하는 것은 어렵고 기존 구현을 요구합니다. –