7

大きなファイル (数十 GB) で 128 ビットのレコードをソートしています。アルゴリズムは正常に動作し、現在uint64_t、これらのうちの 2 つを 1 つのレコードとして使用しています。これは、最新の 64 ビット システム上にあります。

コードを読みやすくするためtypedef struct u128t {uint64_t hi, uint64_t} u128tに、2 つの 64 ビット レコードの代わりに create a struct like を使用できるかどうか疑問に思っています。これにより、配列のインデックス付けと割り当てがより明確になりますが、コンパレータ関数を実装する必要があります。

これは移植可能なソリューションですか? 元の実装と同じ速度で実行できると期待できますか?

参考文献:

4

1 に答える 1

5

構造体を使用しても問題ありません。

私はこのようなことをします:

#if COMPILER_WHICH_SUPPORTS_128_BIT_TYPE
    typedef __uint128 u128t;
    #define COMPARE(a, b) ((a) == (b))
#else
    typedef struct {
        uint64_t hi;
        uint64_t lo;
    } u128t;
    #define COMPARE(a, b)   MyCompareFunction((a), (b))
#endif
于 2013-09-19T13:48:38.137 に答える