首页 > 解决方案 > unsigned long vs uint64_t(性能影响)

问题描述

我正在编写一个 linux 安全模块,并且我bitmap在代码中使用了一个结构。我有两个候选结构如下

struct bitmap {
    unsigned long val[DIV_ROUND_UP(CONFIG_BITMAP_MAX_BITS, sizeof(unsigned long) * 8)];
}

对比

struct bitmap {
    u64 val[DIV_ROUND_UP(CONFIG_BITMAP_MAX_BITS, 64)];
}

使用的底层类型只是一个实现细节,不会暴露给任何使用位图结构的东西。相反,有一些辅助函数可以执行bitmap_union, bitmap_intersection, add_bit_to_bitmap, remove_bit_from_bitmap, ...

因此,我想知道它是否是一个更好的选择unsigned long,只考虑跨架构的位运算(按位与、按位或、按位异或……)的性能影响。

编辑:由于这是一个 linux 安全模块,它旨在支持 linux 内核支持的所有架构(32 位和 64 位)。由于uint64_t并且unsigned long仅在 32 位处理器中有所不同(据我所知),因此该比较仅对 32 位架构有意义。可在此 wiki 页面此处获取 linux 内核支持的体系结构列表。主要关注x86arm处理器。

标签: clinuxperformancecpu-architecture

解决方案


推荐阅读