1

これは 32 ビット アプリケーション用であると想定します。特定のオブジェクトを一意に識別する 2 つの ID 値があります。各 ID は単純な 32 ビットの int であるため、特定のオブジェクトを識別するには、両方の ID 値を一緒に保持する必要があります。

頭に浮かぶ最初の解決策は、それらを 2 つの個別の値として格納し、それらを構造体で渡すことです。

struct {
    int id1;
    int id2;
};

ただし、32 ビットの ID 値が 1 つしかなかったときに行ったように、それらを構造体のペアではなく、1 つの値として渡すことができれば便利です。

したがって、別のアイデアは、それらを uint64_t の上半分と下半分として格納することです。

私の質問は、2 つの方法の間に実際の違いはありますか? いずれにせよ、同じバイト数が渡されますが、CPU は 64 ビット値をネイティブに処理しないため、int64 に特別なオーバーヘッドがあるかどうかはわかりません。

4

3 に答える 3

5

最適な処理は、エンティティの処理方法によって異なります。通常/ほとんどが 2 つのサブフィールドを 1 つのユニットとして比較する場合、int64 は有効です。サブフィールドを個別に検査することが多い場合、構造体はより自然です。

于 2012-05-10T20:18:16.323 に答える
2

構造体を使用しない理由はありません。

于 2012-05-10T20:14:05.310 に答える
1

決心がつかない場合は、ユニオンを使用してください。

たとえば、Microsoft はLARGE_INTEGERunionを定義しています。

于 2012-05-10T20:22:53.487 に答える