有结构(类型)和函数,允许通过共享内存(shm_open 和 mmap)使用结构返回 Type*。
Type* type = openSharedMemory();
如果共享内存为空并且语句typeptr == nullptr
,我想制作内容在不创建但打开SharedMemory内存的过程中应该返回true。 可能吗?
请您参考如下方法:
这不是指针的工作原理。
如果您将指针设置为空,则内存仍会保留在那里,直到有人更改它为止。即使内存中存在 0,这也可能仅表示整数 0。对于 C++ 中的普通指针来说是这样,对于共享内存也是如此。
你需要做的就是让内存“无效”。 C++ 中没有执行此操作的标准,因此必须由您自己定义。
这里有多种选择。
<小时 />一种是给自己定义一个无效的值,并将数据设置为这个值。
例如如果您有一个 int
但您知道您只在其中存储正数,您可以将其设置为 -1
以标记为无效(或最大/最小 int,我想您明白了)。
然后你检查它而不是指针
//in some header
static const int INVALID_VALUE = -1;
//some process
type->shared_int = INVALID_VALUE;
//somewhere else
if(type->shared_int != INVALID_VALUE) //or whatever
//do stuff
<小时 />
如果你的内存中有一个自定义结构,你可以添加一个 bool 标志,无论它是否有效
struct Type
{
bool valid = true; //c++11 initialize to true
//other data members
};
当您现在想要将内存标记为无效时,只需将成员设置为 false 并检查即可。
//some process
type->valid = false;
//somewhere else
if(type->valid)
//do stuff
<小时 />
如果您在使用普通指针时拥有明确的对象所有权,则可以避免这些事情。
在进程间通信中,这可能会变得有点复杂,因此您必须使用这样的机制。
从设计角度来看,最好有一个进程负责内存(分配和释放),并确保其他进程已完成,或者在“删除”内存时停止需要访问内存。但这并不总是可能的。