저는 여러 번 호출하는 함수가 작지만 동적 크기의 벡터를 만드는 C++의 사용 시나리오를 가지고 있습니다. 내 프로그램을 프로파일 링 한 후, std :: vector :: free()에서 지나치게 많은 시간을 보냈다. 이러한 문제에 대한 자연스러운 (C++ - esque) 솔루션은 기본 할당자를 내 사용 시나리오에 좀 더 동의 할 수있는 것으로 전환하는 것처럼 보였습니다. 특히 메모리 풀 전략을 사용하는 것이 여기에서 의미가있는 것처럼 보였습니다. 그러나 boost :: pool_alloc은 지금까지 아무런 문제가되지 않았습니다. 나는 그것을 작동 시키려고했지만 할당은 작은 반면, 함수는 f()라고 부르는 작은 함수에서는 더 빠르지 만 f()를 호출하는 함수는 으로 돌아 오기 전에 멈춘다. 아주 오랜 시간이..boost :: pool 외에도 C++에서 사용자 정의 풀링 된 allocator
더 많은 프로파일 링은 pool_allocator :: ordered_free()에서 모든 시간 (문자 그대로 수십 분이 지났기 때문에 기다리는 것에 지쳐 버렸습니다)이 소비되었음을 보여줍니다. 간단한 테스트 프로그램에서이 같은 동작을 (극단적 인 것은 아니지만) 재현했는데 실제로 많은 수의 생성 된 벡터가 메모리를 싱글 톤 풀로 반환하면 함수는 반환되기 전에 아주 오랫동안 정지됩니다 .
누군가이 동작을 피하는 방법을 알고 있거나 그러한 문제가없는 다른 C++ 풀 할당자를 알고 있다면 나는 많은 의무를지게 될 것입니다!
'예약'은 올바르게 도움이 될 수 있습니다 (아직없는 경우). – justin
안녕 저스틴, 네, 이미 벡터를 예약하고 있습니다. 문제는 함수 호출시 각 벡터의 크기를 알 수 있다는 것입니다.그들은 성장하지 않고 있습니다), 컴파일 시간이 아니기 때문에 여전히 동적입니다. – nomad