Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 128位结构或2条64位记录,以提高性能和可读性_C_Performance_Algorithm_Sorting - Fatal编程技术网

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

C 128位结构或2条64位记录,以提高性能和可读性,c,performance,algorithm,sorting,C,Performance,Algorithm,Sorting,我在一个大文件(10s GB)中对128位记录进行排序。该算法运行良好,目前使用的是uint64_t,其中两条记录等于一条记录。这是在现代64位系统上实现的 出于代码可读性的考虑,我想知道是否可以创建一个类似于typedef struct u128t{uint64_t hi,uint64_t}u128t的结构来代替两个64位记录。这将使数组索引和赋值更干净,但我必须实现一个比较器函数 这是一个可移植的解决方案吗?我应该期望它以与原始实现相同的速度运行吗 进一步阅读: -适用于128位系统 -c

我在一个大文件(10s GB)中对128位记录进行排序。该算法运行良好,目前使用的是
uint64_t
,其中两条记录等于一条记录。这是在现代64位系统上实现的

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

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

进一步阅读:

  • -适用于128位系统
  • -c型
  • -复制结构
使用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

+1用于支持128位类型的编译器。这个解决方案是可读的,而且(我想)是性能的理想选择。有了内联比较器和一个不完全死机的编译器,性能应该不会有明显的下降。唯一可以确定的方法当然是尝试和测量。当使用
struct u128t
时,除了简单的比较外,还可以根据机器的末端对字段
uint64_t hi
uint64_t lo
进行排序。使其他128位操作更容易。