새로운 할당 구조체 (또는 클래스)의 벡터 내부에서 데이터의 다중 역 참조에 대한 성능 차이를 탐색하고 싶습니다. 나는 자주이 예를 들어 나는 많은 반복자 derefencing를 통해 참조의 지역성을 강화하고자 내가 벡터를 반복 코드의 부분에서 std :: 포인터의 컨테이너에 정렬
struct Foo
{
int val;
// some variables
}
std::vector<Foo*> vectorOfFoo;
// Foo objects are new-ed and pushed in vectorOfFoo
for (int i=0; i<N; i++)
{
Foo *f = new Foo;
vectorOfFoo.push_back(f);
}
은 이중 중첩 루프를 수행하는
for (vector<Foo*>::iterator iter1 = vectorOfFoo.begin(); iter!=vectorOfFoo.end(); ++iter1)
{
int somevalue = (*iter)->value;
}
분명히 vectorOfFoo 내부의 포인터가 아주 멀리 떨어져 있다면, 나는 참조의 지역성이 다소 상실되었다고 생각합니다.
반복 전에 벡터를 정렬하기 전에 성능이 어떻습니까? 반복되는 역 참조에서 더 나은 성능을 제공해야합니까?
연속적인 '새'가 메모리 레이아웃에서 가까운 포인터를 할당한다는 것을 확신합니까?
죄송하지만 다시 질문이 무엇입니까? 프로필 작성 했습니까? –
반복 할 메모리 레이아웃에서 연속적인 포인터 배열을 갖는 것이 일반적으로 더 좋은지 알고 싶습니다. – linello
포인터는 반드시 메모리에서 연속적이어야합니다. 벡터에 의해 보장됩니다. –