微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

unsigned long 与 uint64_t性能影响

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