空のキューや空のベクトルなどは何バイトかかりますか?
3 に答える
これは実装の詳細です。標準ではそれについてあまり言及されていません。おそらく最小値を把握できます。
Avector
には、(少なくとも) データ自体へのポインター、実際のサイズと容量があります。したがって、整数のサイズの少なくとも 3 倍です。明らかに、サイズとポインターは 64 ビットである可能性があり、その場合、64 ビットの 3 倍 = 24 バイトになります。しかし、実際の実装を見ない限り、サイズが 64 ビットかどうかはわかりません。
Aqueue
も似たようなものでしょう。
もちろんsizeof(vector<int>)
、自分の目で確かめることもできます。ただし、異なるアーキテクチャで同じであるとは限りません。
この質問に対する一般的な答えはありません。これは実装に完全に依存します。
一般的に言えば、一般的な実装は配列または連結リストに基づいています。その場合、キューの先頭へのポインターと長さ (または末尾へのポインター) が必要になります。これは、 sizeof(void*)*2 バイトかかることを意味します。x86_64 では、16 バイトに相当します。リンクされたリストにも 2 つのポインターがあります。しかし、異なる実装では多かれ少なかれかかる場合があります。たとえば、24 ビットのベース アドレスと 8 ビットを使用してサイズを格納すると、ブックキーピングに 4 バイトしか使用できなくなります。