2017-06-22 17 views
0

C++で大きなデータセットを扱うのは今回が初めてです。これまでは、配列に格納したいものを格納していました。今私は4000x4000の高さマップを生成していますので、私のプログラムが突然100MBを上回る前に(私のようなインディー・フェローのためにちょっと変わったことに)少しメモリの効率が上がりたいです。私のアレイタイプをInt16に変更するとストレージが節約できますか?

大部分のデータをまとめるとロードされますが、実行中にプログラムで大量のデータが必要になるため、大型の2Dアレイが使用されてしまいます。私は彼らにメモリをほとんど使わない方法を見つけたいと思っています。

私のheightmapは、小さな整数値しかとらないように設計されています。可能であればInt8に収まるくらい小さいですが、少なくとも最小値はInt16です。これまでのところ、Intタイプを使用していましたが、これは私の実装ではInt32です。

2D配列とベクトルをInt16タイプのセットに切り替えると、ストレージの半分が節約できますか?あるいは、アレイの1つの要素がまだ完全な1バイトを取り、単純にこれらの手の届かないビットをゼロのままにしますか?

+0

「Int16」を意味するかどうかはわかりませんが、私はそれが2バイト以上を占めると予想します。どのような "手つかずのビット"とはどういう意味ですか? – user463035818

答えて

2

(これはint32_tと同じであると仮定)Int32から(これはint16_tと同じであると仮定した場合)Int16への切り替えは、(一緒に行くすべての簿記を考慮していない半分にあなたの配列由来のメモリ消費量をダウンさせるだろうおそらく動的サイズの配列)

int16_tは2バイト、int32_tは4バイトです。 16_tは16ビットを意味します。

実行時に使用しないビットだけが変更されています。 Unlike some pointer typesには、整数の未使用ビットはありません。あなたは固定幅の整数型について話している場合は、0と1が整数の値

2

にアイデンティティを与え、[はい int16_t は、パディングビットなしの16ビットであることが保証されます。

std::cout << sizeof(int16_t[1000]) << " " << sizeof(int32_t[1000]); 
関連する問題