2017-05-12 8 views
-1

構造体に格納する必要がある2つの(符号なしの短い)16ビット値があるとします。単一の32ビット整数または2つの符号なしshort変数としてそれらを一緒に格納する必要がありますか?コード生成の点でクロスプラットフォーム(x86の、ARM 32ビット/ 64ビット)符号の全体良いだろう効率的なクロスプラットフォームコードのために構造体のメンバーをパックする方法は?

struct Foo { 
unsigned CombinedValue; // A 

unsigned short Index; //B 
unsigned short Counter; //B 
}; 

?私が2つの32ビットintを格納していた場合、答えは同じでしょうか?

+0

一般的なアドバイスは、彼らが異なるサイズをしている場合は特に試してみて、効率的なパッキングのためのあなたのメンバーを並べ替えることがあることを考えると、同じサイズのメンバーのための一般的なアドバイスは何ですか。 – crezefire

+0

'unsigned 'が32ビットであることをどのように知っていますか? –

+5

保持する必要のあるデータに適したタイプを使用します。私は 'int'をデフォルトとしています。これらの種類のマイクロ最適化は、コードが機能し、それが問題であると判断するまでプロファイリングするまで、実際には避けるべきです。 – NathanOliver

答えて

-1

最も意味論的な意味でそれらを格納し、最適化コンパイラにはそれがうまくいくようにします。固定幅の16ビットタイプが必要な場合は、uint16_tのようなタイプの<cstdint>も使用することを検討する必要があります。 unsigned shortは常に16ビットであるとは限りません。

関連は: https://softwareengineering.stackexchange.com/questions/80084/is-premature-optimization-really-the-root-of-all-evil

+0

これは投稿後5秒以内にコメント無しでdownvotedされたので、誰かが誤って犯してしまったと仮定することができます! – TypeIA

関連する問題