그래서 저는 C++에서 메모리 풀 클래스를 구현하는 데 시간을 썼습니다. 도중에 약간의 사소한 문제를 제외하고는, 상당히 잘 진행되었습니다. 그러나 처음에 메모리 풀을 사용하여 1000 개의 청크를 할당 한 다음 새로운을 사용하여 비교 한 결과, 메모리 풀을 사용할 때 실제로는 거의 3 배나 성능이 떨어졌습니다 (나노초 단위). 내 할당 방법은 다음과 같습니다 : 나는 풀의 첫 번째 덩어리에서 시작하여 내가 무료 덩어리를 찾을 때까지 풀의 연결리스트를 통해 검색을 수행하거나, 풀의 끝에 도달하고메모리 풀에서 다음 사용 가능한 청크 찾기
template <class T> T* MemPool<T>::allocate()
{
Chunk<T>* tempChunk = _startChunk;
while (tempChunk->_free == false)
{
if (tempChunk->_nextChunk == NULL)
throw std::runtime_error("No available chunks");
tempChunk = tempChunk->_nextChunk;
}
tempChunk->_free = false;
return &tempChunk->object;
}
. 이제는 풀이 클수록 검색에 O (n) 시간의 복잡도가있는만큼 더 오래 걸립니다. 여기서 n은 풀의 청크 수입니다.
할당을 향상시키는 방법에 대해 의견이있는 사람이 있는지 궁금합니다. 나의 초기 생각은 단지 하나 대신 두개의 링크 된리스트를 사용하는 것이었다. 여기에는 하나의 프리 덩어리와 다른 할당 된 덩어리가있다. 새로운 청크가 할당 될 때, 먼저 언급 된 첫 번째 링크 된 목록의 첫 번째 요소를 가져 와서 할당 된 연결된 목록으로 옮깁니다. 내가 볼 수있는 한, 할당 할 때 검색을 수행 할 필요가 없으며 올바른 청크를 찾기 위해 검색을 요구하는 할당 해제 만 남겨 둡니다.
이 방법으로 메모리로 직접 작업하는 것은 처음이기 때문에 어떤 생각이라도 환영합니다. 감사!
청크가 모두 같은 크기입니까? –