2012-01-22 5 views
7

목록을 생성 한 후 (목록 작성과 관련된 오버 헤드를 무시한 후) 동일한 객체를 반복하여 목록에 추가하는 데 필요한 메모리 비용은 얼마입니까? 다음은 단지 동일한 포인터를 메모리에 반복해서 추가한다는 것입니다. 따라서이 목록은 실제로 많은 메모리를 차지하지 않습니다. 누군가 그 사실을 확인할 수 있습니까?반복 객체가있는 목록 - 메모리 비용은 얼마입니까?

List<newType> list = new List<newType>(); 

newType example = new newType(); 

for (int i = 0; i < 10000; i++) 
{ 
    list.Add(example); 
} 

편집

뉴 타입은 클래스 (의 새로운 뉴 타입이 더 포인터보다 메모리의 상당한 양을 차지한다고 가정하자). 죄송합니다.

답변

5

이것은 newTypeclass (참조 유형)인지 struct (값 유형)인지 여부에 따라 다릅니다. 참조 유형에 대한 설명은 정확하지만 값 유형이 모두 복사되므로 목록에 요소를 추가 할 때 값 유형의 크기만큼 목록이 커집니다. 또한 내부적으로 List은 더 많은 요소를 수용 할 것으로 예상하여 메모리를 청크로 할당하기 때문에 목록 증가는 요소 추가로 균일하지 않습니다.

+0

내 편집을 참조하십시오. 그래도 고마워! – carlbenson

+0

@CarlBenson 그럼 당신은 옳습니다. 무슨 일이 일어나고 있는지에 대한 Andrew Hare의 뛰어난 설명을보십시오. – dasblinkenlight

2

동일한 개체에 대한 여러 참조를 저장하므로 오버 헤드가 거의 없습니다. 목록에는 추가하는 객체에 대한 참조 만 저장되며 객체 자체는 다른 위치에 할당됩니다. 동일한 객체를 여러 번 추가하기 때문에 모두 힙에있는 동일한 객체를 가리키고 유일한 오버 헤드는 참조 자체가됩니다.

관련 문제