이미이 주제에 대한 주제가 있지만 여전히 의문 사항이 있습니다.sizeof() std :: vector (C++)
sizeof(VEC) + sizeof(int) * VEC.capacity()
또는
VEC.capacity() * (sizeof(VEC) + sizeof(int))
이미이 주제에 대한 주제가 있지만 여전히 의문 사항이 있습니다.sizeof() std :: vector (C++)
sizeof(VEC) + sizeof(int) * VEC.capacity()
또는
VEC.capacity() * (sizeof(VEC) + sizeof(int))
당신이 벡터의 크기에 의해 무엇을 의미합니까 하나가 올바른지 벡터의 크기를 계산하려면? 벡터 객체의 크기가 다음을 추가하면 바로
당신이 벡터는 힙에 할당 한 메모리의 양에 관심이 있다면sizeof(vec);
, 당신은, 그래서
vec.capacity()*sizeof(T)
을 사용할 수 있습니다, 당신 ' 벡터로 인해 얼마나 많은 메모리를 "잃어 버렸"지 알 수 있습니다.
vec.capacity()*sizeof(T) + sizeof(vec)
정확히 할당 된 메모리 양은 구현에 따라 다릅니다. 위의 수식이 실제로는 일 것입니다. 모든 구현이 아닐지라도 대부분이 정확합니다 (또는 대략 정확함).
구현 방법에 따라 추측됩니다. –
@Dietrich : 당신은 실제로 내 대답을 읽었습니까? –
'vector' *가 어떻게 효과적으로 구현 될 수 있는지에 대한 제약 조건을 감안할 때, 이것은'vector'와 그 내용이 차지하는 메모리 양에 대한 정확한 * lower bound *를 제공한다고 생각합니다. +1. –
는 유형이 다른 오래 오래 아무것도 변경할 수 없습니다 말을 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
[벡터()를 sizeof]의 중복 가능성 (http://stackoverflow.com/questions/2373189/sizeof-a-vector) – Joe
@jrok : 그건 어떻게 구현 작업에 따라 단지 추측 . –