7

我正在对一个大文件(10 GB)中的 128 位记录进行排序。算法工作正常,目前使用uint64_t其中两个等于一个记录。这是在现代 64 位系统上。

出于代码可读性的考虑,我想知道是否typedef struct u128t {uint64_t hi, uint64_t} u128t可以使用 create 类似的结构来代替两个 64 位记录。这将使数组索引和分配更清晰,但我必须实现一个比较器函数。

这是一个可移植的解决方案吗?我是否应该期望它以与原始实现相同的速度运行?

进一步阅读:

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 回答