2012-01-08 1 views
8

이미이 주제에 대한 주제가 있지만 여전히 의문 사항이 있습니다.sizeof() std :: vector (C++)

sizeof(VEC) + sizeof(int) * VEC.capacity() 

또는

VEC.capacity() * (sizeof(VEC) + sizeof(int)) 
+0

[벡터()를 sizeof]의 중복 가능성 (http://stackoverflow.com/questions/2373189/sizeof-a-vector) – Joe

+4

@jrok : 그건 어떻게 구현 작업에 따라 단지 추측 . –

답변

12

당신이 벡터의 크기에 의해 무엇을 의미합니까 하나가 올바른지 벡터의 크기를 계산하려면? 벡터 객체의 크기가 다음을 추가하면 바로

당신이 벡터는 힙에 할당 한 메모리의 양에 관심이 있다면
sizeof(vec); 

, 당신은, 그래서

vec.capacity()*sizeof(T) 

을 사용할 수 있습니다, 당신 ' 벡터로 인해 얼마나 많은 메모리를 "잃어 버렸"지 알 수 있습니다.

vec.capacity()*sizeof(T) + sizeof(vec) 

정확히 할당 된 메모리 양은 구현에 따라 다릅니다. 위의 수식이 실제로는 일 것입니다. 모든 구현이 아닐지라도 대부분이 정확합니다 (또는 대략 정확함).

+1

구현 방법에 따라 추측됩니다. –

+9

@Dietrich : 당신은 실제로 내 대답을 읽었습니까? –

+0

'vector' *가 어떻게 효과적으로 구현 될 수 있는지에 대한 제약 조건을 감안할 때, 이것은'vector'와 그 내용이 차지하는 메모리 양에 대한 정확한 * lower bound *를 제공한다고 생각합니다. +1. –

0

는 유형이 다른 오래 오래 아무것도 변경할 수 없습니다 말을 INT로 변경되면 벡터

std::vector<int> vec; 
... 
vec.size() * sizeof(decltype(bufferIn)::value_type)) 

에 포함 된 데이터의 크기를 알고 싶은 경우. 이 솔루션은 크기가 다른 유형없이 쉽게 변경할 수 있기 때문에 sizeof 형식을 사용하는 것이 안전합니다.

std::vector<long long> vec; // lets go from int to int64 
... 
vec.size() * sizeof(int); // woops problem on the horizon