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

Wil*_*ken 7 c sorting algorithm performance

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

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

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

进一步阅读:

use*_*733 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
Run Code Online (Sandbox Code Playgroud)

  • +1为COMPILER_WHICH_SUPPORTS_128_BIT_TYPE.这个解决方案既可读又可以(我猜)是性能的理想选择. (2认同)