2013-02-20 3 views
1

빈 큐나 빈 벡터 등은 몇 바이트를 취합니까?빈 큐에 몇 바이트가 걸립니까?

+6

구현에 따라 다릅니다. –

+0

구현이 정의되었습니다. –

+0

그리고 프로세서 아키텍처에 따라 다릅니다. –

답변

6

구현 세부 사항입니다. 표준에서는 그것에 대해 많이 언급하지 않습니다.

vector에는 데이터 자체에 대한 포인터, 실제 크기 및 용량이 있습니다 (최소). 그래서 적어도 정수의 3 배 크기. 분명히 크기와 포인터는 64 비트 일 수 있으며,이 경우 3 비트 64 비트 = 24 바이트입니다. 그러나 실제 구현을 보지 않고 크기가 64 비트인지 64 비트인지 여부는 알 수 없습니다.

queue은 아마도 유사 할 것입니다.

물론 sizeof(vector<int>)을 수행하고 직접 볼 수 있습니다. 그러나 다른 아키텍처에서 동일한 것은 보장되지 않습니다.

+0

똑같은 추론이'std :: string'에 대해 유지되어야한다고 생각해보십시오. 확실히 데이터 자체, 크기 및 용량이 있습니다. 그러나 Windows에서 g ++ 4.7.2를 사용하면'std :: string'은 단일 포인터의 크기 인 4 바이트입니다. 보유하고있는 포인터가 0이 아니기 때문에 실제로 사용하는 저장소가 실제로는 최소값 이상이지만, 빈 포인터 인 경우에는 내부 포인터가 nullpointer가 될 수 있습니다.이 경우 인스턴스는 단일 포인터. –

0

이 질문에 대한 일반적인 대답은 없습니다. 이것은 전적으로 구현에 의존합니다.

0

일반적으로 일반적인 구현은 배열 또는 링크 된 목록을 기반으로합니다. 이 경우 큐의 시작과 길이 (또는 끝의 포인터)에 대한 포인터가 필요합니다. 이는 다시 sizeof (void *) * 2 바이트를 사용한다는 것을 의미합니다. x86_64에서는 16 바이트가됩니다. 연결된 목록에는 두 개의 포인터도 있습니다. 그러나 구현에 따라 다소 차이가있을 수 있습니다. 예를 들어, 24 비트 기본 주소와 8 비트를 사용하여 크기를 저장할 수 있기 때문에 4 바이트의 부기 만 사용할 수 있습니다.

관련 문제