问题描述
我正在编写一个 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 位架构有意义。 linux 内核支持的架构列表可在 this wiki page 和 here 获得。主要关注 x86
和 arm
处理器。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)