我是C编程的菜鸟。我发现 uint64_t
在 libibverbs 中用作缓冲区的地址而不是 void*
。
struct ibv_sge{
uint64_t addr;
uint32_t length;
uint32_t lkey;
}
我能想到的一个缺点是它的便携性。在 32 位系统上,它会导致编译错误或至少是内存浪费。那么为什么会这样呢?有什么好处吗?
我还注意到还有其他替代方法,例如
uintptr_t
。描述内存通用地址的最佳方法是什么? 最佳答案
骗局:
C 没有通用地址。最接近的是
void *
,但仅指定用于对象指针就足够了。 void *
可能不足以用于函数指针。任何函数指针类型与另一种函数指针类型的大小相同。对于 C,请改用
union
。union u_pointer {
void *obj;
int (*fun)();
};
但是,读取和写入这些成员的访问需要谨慎处理,就像任何通用指针的情况一样。关于c++ - 使用 uint64_t 作为通用内存地址而不是 void* 的优缺点是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45273291/