【发布时间】:2021-11-01 04:03:09
【问题描述】:
C++ 有一个简洁的特性,您可以在特定的内存地址创建一个对象,如shown here。
这对于mmap 尤其有用,如下所示:
void *ptr = mmap(0, length, prot, flags, fd, offset);
A *ptrA = new (ptr) A;
仅使用 C 样式的结构来复制它的正确方法是什么?会是这样吗?
void *ptr = mmap(0, sizeof(A), prot, flags, fd, offset);
A *ptrA = (A*) ptr;
【问题讨论】:
-
您只需设置地址并将其视为结构。 C 不会验证您是否正确使用了任何内存。通常写入特定地址用于写入硬件寄存器。
-
如图所示,将从 mmap 返回的指针转换为指向所需类型的指针。
-
仅供参考,C 中的显式转换是不必要的,因为 void 指针可以分配给任何类型的指针变量:
A *ptrA = ptr; -
@kaylum:任何对象类型,不是任何类型。