我在一个大文件(10英寸GB)中对128位记录进行排序。算法工作正常,目前使用uint64_t
,其中两个等于一个记录。这是一个现代的64位系统。
为了代码可读性,我想知道是否可以使用创建类似typedef struct u128t {uint64_t hi, uint64_t} u128t
的结构代替两个64位记录。这将使数组索引和赋值更清晰,但我必须实现比较器函数。
这是一个可移植的解决方案吗?我希望它能以与原始实现相同的速度运行吗?
进一步阅读:
答案 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