128位结构或2个64位记录,以提高性能和可读性

时间:2013-09-19 13:35:47

标签: c performance algorithm sorting

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

为了代码可读性,我想知道是否可以使用创建类似typedef struct u128t {uint64_t hi, uint64_t} u128t的结构代替两个64位记录。这将使数组索引和赋值更清晰,但我必须实现比较器函数。

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

进一步阅读:

1 个答案:

答案 0 :(得分:5)

使用struct很好。

我会做这样的事情:

#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