C# 内存映射,是否可以将对象与内存位置同步?

C# 内存映射,是否可以将对象与内存位置同步?,c#,memory-mapped-files,C#,Memory Mapped Files,因此,我在一个共享内存文件中有一个内存段,在C语言中,它的结构是在最后有一个固定大小的缓冲区元素数组。大小我不能在C中使用固定大小的数组#在结构的末尾,我创建了一个缓冲区结构来封装它,并在读取头之后读取它们,所有这些都可以 struct SDKHeader { int a; int b; int numBuf; //Number of buffers to read from long c; } struct SDKBuffer { int size;

因此,我在一个共享内存文件中有一个内存段,在C语言中,它的结构是在最后有一个固定大小的缓冲区元素数组。大小我不能在C中使用固定大小的数组#在结构的末尾,我创建了一个缓冲区结构来封装它,并在读取头之后读取它们,所有这些都可以

struct SDKHeader {
    int a;
    int b;
    int numBuf; //Number of buffers to read from
    long c;
}

struct SDKBuffer 
{
    int size;
    int location; //Position in shared memory
}
简化代码我是这样读的:

memoryMap = MemoryMappedFile.OpenExisting(MemMapFilename);
memoryAccessor = memoryMap.CreateViewAccessor();

int headerSize = Marshal.SizeOf(typeof(SDKHeader));
memoryAccessor.Read(0, out header);

int bufferSize = Marshal.SizeOf(typeof(SDKBuffer));
buffers = new SDKBuffer[header.numBuf];
for(int i = 0; i < header.numBuf; i++)
{
    memoryAccessor.Read(headerSize + i * bufferSize, out buffers[i]);
}
memoryMap=MemoryMappedFile.OpenExisting(MemMapFilename);
memoryAccessor=memoryMap.CreateViewAccessor();
int headerSize=Marshal.SizeOf(typeof(SDKHeader));
memoryAccessor.Read(0,输出标题);
int bufferSize=Marshal.SizeOf(typeof(SDKBuffer));
缓冲区=新的SDKBuffer[header.numBuf];
对于(int i=0;i

我的问题是,这种结构每秒更新好几次,在C语言中,它就像
pHeader=(HeaderType*)psharedem一样简单
允许对数据进行原始访问,而无需继续将其读入另一个区域。这在C#中可能吗?以某种方式在共享内存中的一个结构和一个memorylocation之间建立连接?

在C#中,您可以用不安全的代码做同样的事情。相同的代码只起作用(
var pHeader=(HeaderType*)psharedem;

当然,使用不安全代码和能够以这种方式使用结构需要满足一些要求。网络搜索很容易找到它们