c - 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 内核支持的体系结构列表。主要关注x86
和arm
处理器。
解决方案
推荐阅读
- python - sklearn lda.predict 的输出与输入标签不同
- algorithm - 如何加速 geopandas 空间连接?
- sql - 意外结果的 Oracle 订单
- phpstorm - PhpStorm:动态更改文件类型的任何方式
- oracle - 为 ODBC 创建 oracle 只读用户
- inject - 找不到easyhook64.dll
- curses - 仅在终端的一小部分使用 Python 3 curses
- image - 用于在单独的服务器中验证文件上传的共享密钥
- linux - 当我运行 test.sh 文件时,Jenkins 控制台显示权限被拒绝错误
- monitoring - 通过重新加载离开僵尸进程监控配置更新