2014-07-22 3 views
5

boost::pool을 사용하여 할당 된 객체로 std::vector의 객체를 갖고 싶습니다. 이게 옳은 것입니까?boost :: pool을 사용하여 std :: vector에서 메모리 할당을 관리하십시오.

class MyClass 
{ 
private: 
    double data; 
public: 
    MyClass(double d) : data(d) { } 
}; 

int main() 
{ 
    std::vector<MyClass, boost::fast_pool_allocator<MyClass> > vect; 
    vect.push_back(4.5); 
    vect.push_back(9.8); //Are these being stored in a pool now? 

    return 0; 
} 

이 코드는 작동하지만 완전히 확신 할 수 없습니다. 나는 allocators의 개념에 대해 처음으로 알고있다. 그러나 정확하게 이해한다면 std::vector은 디폴트 할당 자 대신에 풀을 사용한다고 말하고있다. 따라서 벡터에서 생성 된 모든 요소는 풀에서 만들어 질 것이다.

정확하지 않은 내용은 다음과 같습니다.

풀이 어디에 있습니까?

그리고 어떻게 풀에 직접 액세스합니까 (예 : 메모리를 확보하기 위해)?

fast_pool_allocator에 풀이 포함되어 있습니까? 아니면 풀을 별도로 만들어야하며 어떻게 든 할당 자에게 사용하도록 알리십시오.

+1

예 : [this'std :: vector' reference] (http://en.cppreference.com/w/cpp/container/vector). 할당자를 얻는 데 적합한 함수를 찾을 수있을 것입니다. [std :: vector 생성자] (http://en.cppreference.com/w/cpp/container/vector/vector)도 확인해 볼 수 있습니다. –

+1

[boost reference] (http://www.boost.org/doc/libs/1_55_0/libs/pool/doc/html/boost/fast_pool_allocator.html)는'boost :: pool_allocator'와'std : : 벡터'. –

답변

3

boost::fast_pool_allocator의 경우 풀은 할당 자 구현이 소유 한 싱글 톤입니다. 따라서 별도로 생성 할 필요가 없습니다.

get_allocator 함수를 통해 할당 자에 액세스하거나 std::vector 함수를 사용하거나 boost::fast_pool_allocator의 정적 함수를 사용할 수 있습니다.

3

boost reference에서 보면, 모두가 사용하는 할당 자의 싱글 톤 인스턴스가 있습니다. 이 파일을 사용하여 메모리를 할당하고 해제 할 수 있으며 로컬 boost::fast_pool_allocator 또는 boost::pool_allocator 오브젝트를 생성하면됩니다.