unsigned long 与 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_unionbitmap_intersectionadd_bit_to_bitmapremove_bit_from_bitmap、...

因此,我想知道使用 unsigned long 是否是更好的选择,仅考虑跨架构的位操作(按位与、按位或、按位异或等)的性能影响.

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

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)