현재 서면으로 작성한 라이브러리에서 폴리곤 계열이 아닌 내 작은 객체는 객체 풀 내에서 unique_ptr
의 벡터로 할당됩니다. 이제 분명히 새로운 것을 여러 번 부르는 데 많은 오버 헤드가 있기 때문에 이것을 바꾸고 싶습니다. 좀 더 효율적인 방법은 다음과 같습니다. 객체를 풀 (벡터에 저장 (예 : vector<Object>
))하거나 객체가 필요할 때 ID를 통해 객체를 생성하는 방법이 궁금합니다. 그리고 생성 된 많은 객체가 있음을 주목하십시오. 필요할 때 객체를 생성스택에 작은 객체를 힙 (한 번)에 만들면 더 효율적입니까?
:
내가이 일을해야한다, 내 말은 무엇입니까?
Object ObjectFactory::create()
{
return Object(nextId(), getParent());
}
Object ObjectFactory::get(unsigned id)
{
return Object(id, getParent());
}
또는 (모두 포함 된 이러한 객체 64-128 비트가 작고 참고하면 ID 및 기준 부모 객체/포인터) I 구체적있어 어떤
Object& ObjectFactory::create()
{
// get the next id of the object
unsigned id = nextId();
// resize (if necessary)
if(_objects.size() <= id)
{
_objects.resize(id + 1);
_objects[id]._parent = getParent();
}
return _objects[id];
}
Object& ObjectFactory::get(unsigned id)
{ return _objects[id]; }
우려하고있다 : Object
의 재창조가 훨씬 과장 될까?
이 질문에서 하나 개의 누락 된 세부 사항이 있습니다 : 당신은 두 가지 버전을 실행할 때, 너무 많은 하나의 오버 헤드가 무엇입니까? –
잠깐 동안 힙이 스택보다 100 배 느리다 고 가정하십시오. 귀하의 응용 프로그램은 너무 자주이 차이점을 발견합니까? 그렇지 않은 경우 깨끗하고 사용하기 쉽고 인터페이스를 유지하는 것이 더 중요하지 않습니까? – PlasmaHH
연속 된 메모리에 객체를 저장하면 (std :: vector가 보증 함) 메모리의 조각난 영역에 객체를 저장하는 대신 엄청난 속도 향상을 가져올 수 있습니다. – borisbn