gpt4 book ai didi

c++ - 使用 uint64_t 作为内存的通用地址而不是 void* 有什么优缺点?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:21:15 27 4
gpt4 key购买 nike

我是 C 编程的菜鸟。我发现 uint64_t 在 libibverbs 中用作缓冲区地址而不是 void*

struct ibv_sge{
uint64_t addr;
uint32_t length;
uint32_t lkey;
}

我能想到的一个缺点是它的便携性。在 32 位系统上,它会导致编译错误或至少会造成内存浪费。那为什么会这样呢?有什么好处吗?

我还注意到还有其他替代方法,例如 uintptr_t。描述通用内存地址的最佳方法是什么?

最佳答案

pros and cons of using uint64_t as an universal address of memory

缺点:

  1. 当较窄的通用地址可以时,它可能会不必要地宽。

  2. 当需要更广泛的通用地址时,它可能会变得不必要地狭窄。

C 没有通用地址。最接近的是 void *,但它仅指定足以用于对象指针。 void * 可能不足以作为函数指针。任何函数指针类型的大小都与另一种函数指针类型的大小相同。

A pointer to void may be converted to or from a pointer to any object type. A pointer to any object type may be converted to a pointer to void and back again; the result shall compare equal to the original pointer. C11dr §6.3.2.3 1

A pointer to a function of one type may be converted to a pointer to a function of another type and back again; the result shall compare equal to the original pointer. §6.3.2.3 8


What's the best approach to describe an universal address of memory?

对于 C,请使用 union

union u_pointer {
void *obj;
int (*fun)();
};

不过,读取和写入这些成员的权限需要小心处理,就像任何通用指针一样。


关于c++ - 使用 uint64_t 作为内存的通用地址而不是 void* 有什么优缺点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45273291/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com