如何解决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_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 举报,一经查实,本站将立刻删除。