ヘッダーを書き、それをテストした後、私はこのヘッダーの効率を知りたいと思っていました。ヘッダが基本的に行うことは、できるだけ効率的にマップを格納することです。 Map.SetValue()は座標を格納し、Map.GetValueは座標を取得します。座標は2次元ベクトルに格納され、4つの値が1つのcharに格納されます(値ごとに4つの可能性があります)。C++:クラスインスタンスのサイズを取得
私はこのコードを使用して、クラスのサイズを取得しようとしました:
(MapStorageは、クラスの名前であるとしてMapStorage地図、クラスのインスタンスを作る)
int main()
{
MapStorage Map;
int Coords[2];
int Value;
int Size;
float Efficiency;
for (int i = 0; i < 100; i += 1){
for (int x = 0 + 10*i; x < 10 + 10*i; x += 1){
for (int y = 0; y < 10; y += 1){
Coords[0] = x;
Coords[1] = y;
Value = rand()%4;
Map.SetValue(Coords, Value);
}
}
Size = sizeof(Map);
Efficiency = Size/float(i+1);
std::cout << "Size at " << i+1 << " Square meters: " << Size << ", Effficiency: " << Efficiency << std::endl;
}
return 0;
}
しかし、何が起こることはありますこれは常にサイズが20バイトであることを表示しますが、i = 99ではサイズは少なくとも2,5kb(100平方メートル、100値/平方メートル、100 * 100 = 10000、1バイトあたり4値、10,000/4 = 2,500バイト)。
質問は何ですか:私は間違っていますか?どのようにsizeofの作品を理解していないか、それはクラスとは違った働きをしますか?私は同じ問題を抱えた他の人たちを探していましたが、私の問題に当てはまる解決策を見つけることができませんでした。
種類に関して、 害
ノート:
私はunsigned char型の2次元ベクトルとしてマップを格納します。静的として宣言されていません。
'sizeof'の定義をお読みください、あなたの前提に欠陥がある理由を教えてくれるでしょう。 –
'MapStorage'とは何ですか? 'sizeof(map)'を実行しても、マップ内の項目の数は表示されず、オブジェクトのサイズ(メンバ変数と可能な仮想テーブルとパディングを含む)だけが表示されます。なぜあなたはどう思う? ['std :: vector'](http://en.cppreference.com/w/cpp/container/vector)には[' size() '](http://en.cppreference.com/w/cpp)があります。/container/vector/size)メンバ関数? * size *という用語が何か他のものを意味する場合、あなたが望むように、なぜsizeof演算子が自動的にそれをユーザ定義型から計算できると思いましたか? –
sizeof on pointerはポインティのサイズを返しません – Incomputable