1

우리가 클래스 A을 가지고 있고 배열의 각 요소를 루프 할 때마다 각 개체가 메모리의 다른 위치에 있고 정렬되지 않았기 때문에 현금 누락을 일으킬 수있는 A 개체에 대한 포인터 배열이 있다고 가정 해 보겠습니다. 동일한 블록에서 하나씩 차례로 처리합니다. 실제 개체가 아니라 개체에 대한 포인터의 배열이기 때문입니다.사용자 정의 블록 할당자를 사용하여 배열에 넣은 포인터를 할당 할 때 현금 문제가 해결되지 않습니까?

사용자 지정 할당자를 만들어서이 문제를 해결하고 싶습니다.이 할당자를 사용하여 배열에 포인터를 넣습니다. 할당자는 모든 객체가 메모리에서 항상 서로 옆에 있고 블록으로 정렬되도록합니다. 그 배열을 반복 할 때 현금 누락 문제를 해결합니까?

자세한 내용 : 내가 객체를 ALLOC 때 사용자 지정 할당을 만들 것입니다

는,이 할당은 모든 개체를 처리 할 수있을만큼 큰 메모리 블록을 ALLOC 것, 나중에이 할당은 블록 내의 여유 공간을 선택합니다 매번 모든 객체를 다른 객체의 옆에 놓기 위해 한 번에 캐쉬 메모리에로드되어 더 적은 현금 손실을 초래합니다.

+0

무엇을 원하십니까? 나는 당신의 제안 된 솔루션을 의미합니다. – gsamaras

+0

사용자 지정 할당자를 생성합니다.이 할당자가 모든 객체를 처리 할만큼 큰 메모리 블록을 할당합니다. 나중에 객체를 할당 할 때마다이 할당자는 그 블록 내의 여유 공간을 선택하여 모든 객체가 다음에 배치되도록합니다 다른 사람에게, 그들은 현금 기억에 즉시 적재되고 현금 미스가 덜 발생할 것입니다. –

답변

0

첫 번째 객체를 통해 첫 번째 객체에 액세스 할 때 처음에는 여러 개 포인터는 캐시로 가져온 다음 여러 개체로 가져옵니다.

두 번째 포인터에 액세스하면 실제로 캐시에 이미 있으므로 두 번째 개체도 캐시됩니다. 등등.

그래,이게 도움이 되겠지만 포인터 대신 실제 개체를 직접 보유하고있는 메모리 블록을 사용할 수는 없습니까? 그렇지 않은 경우 디자인을 다시 평가하십시오. 객체를 직접 사용하면 객체의 데이터 지역이 최대화됩니다.

+0

니스! 객체는 다른 크기 (같은 기본 클래스)가 될 것입니다 ... (할당자가 이것을 처리 할 수 ​​있습니다.) –

+0

다른 객체를 기다리고 있었기 때문에 객체가 오버라이드 될 수있는 가상 함수를 가지고 있기 때문에 실제로 포인터를 사용했습니다. 아직도 잊지 말고, 최선의 답을 받아 들일 것입니다.) 정보의 기원에 대한 언급을 추가하여 개선하고 '아마'확신 할 수있는 것들을 제거하십시오. –

관련 문제