2012-05-12 1 views
1

I가 회원으로 일부 벡터가있는 구조체 : 구조체 내부에C++ 크기

my_struct A; 

벡터 (들) :

struct my_struct 
{ 
    std::vector<int> x; 
// more members here 
}; 

및 my_struct의 인스턴스를 분명히 같은

A.x.resize(...); 

또는 Axpush 같은 문으로, 프로그램의 실행 중에 변경할 수 있습니다 _뒤로(...);

제 질문은, 프로그램의 어느 시점에서 A의 메모리 크기를 알 수있는 방법이 있습니까? sizeof (A)는 벡터 멤버 때문에 정답을 반환하지 않습니다.

+4

그런 경우 왜 정적 배열을 사용하지 않습니까? – zch

+0

기존 코드는 벡터를 사용하며이 구조체가 바이너리 파일에 쓰여야합니다. 벡터를 사용하면 벡터를 다른 벡터 (예 : x = y)에 직접 할당 할 수있어 편리합니다. – MGA

+0

물론 내 문제에 대한 해결책이 없다면 항상 최후의 수단으로 정적 어레이를 사용할 수 있습니다. – MGA

답변

4

벡터의 크기는 구조체의 크기에 영향을 미치지 않습니다. 벡터는 힙의 객체를 보유하기 위해 메모리를 할당하기 때문에 기본 할당자는 적어도 사용합니다. 또한 파일에 구조체 내용을 쓸 때 벡터가 보유한 객체는 절대 기록되지 않고 벡터의 데이터 멤버 값만 기록됩니다. 객체는 어떤 종류의 포인터에서 벡터에 의해 참조되므로 파일에 쓰여지는 것은 가리키는 데이터가 아니라 포인터 (주소)의 값입니다. 벡터 및 해당 객체를 파일에 작성하려면 직접 구현해야합니다. 아마도 부스트 직렬화 도움이 될 수 있습니다 여기에.

+0

감사합니다. 팻 (zat)이 제안한 것처럼 정적 배열을 사용하는 것이 나을 것 같아요. 그렇게 우아하지는 않지만 빠른 해결 방법입니다. – MGA