gpt4 book ai didi

c - 使用 C 的内存映射文件中的相对指针

转载 作者:太空狗 更新时间:2023-10-29 15:07:11 25 4
gpt4 key购买 nike

是否可以在内存映射文件中使用带有指向另一个结构的指针的结构,而不是将偏移量存储在某种整数类型中并计算指针?

例如给定以下结构:

typedef struct _myStruct_t {
int number;
struct _myStruct_t *next;
} myStruct_t;
myStruct_t* first = (myStruct_t*)mapViewHandle;
myStruct_t* next = first->next;

而不是这个:

typedef struct _myStruct_t {
int number;
int next;
} myStruct_t;
myStruct_t* first = (myStruct_t*)mappedFileHandle;
myStruct_t* next = (myStruct_t*)(mappedFileHandle+first->next);

我读到过“__based”关键字,但这是 Microsoft 特定的,因此受 Windows 限制。

寻找与 GCC 编译器一起工作的东西。

最佳答案

我很确定 GCC 中的 Visual Studio 中没有类似于 __based 指针的东西。我唯一一次看到类似内置的东西是在一些非常奇怪的硬件上。 Visual Studio 扩展围绕涉及指针的所有操作提供了一个地址转换层。

所以这听起来像是您进入了自己的领地;尽管我愿意别人告诉我。

我上次处理这样的事情是在掌上平台上,除非你锁定内存,否则它有可能被移动。你从分配中获得了内存句柄,你必须在使用它之前 MemHandleLock ,并且在你使用完它之后 MemPtrUnlock 它这样 block 就可以被操作系统移动(这似乎发生在基于 ARM 的掌上设备上)。

如果您坚持在内存映射结构中存储类似指针的值,第一个建议是将值存储在 intptr_t 中,这是一个可以包含指针值的 int 大小.虽然您的偏移量不太可能超过 4GB,但保持安全是值得的。

也就是说,这可能很容易使用模板类在 C++ 中实现,只是将问题标记为 C 会使事情变得更加困惑。

关于c - 使用 C 的内存映射文件中的相对指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24181774/

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