gpt4 book ai didi

c# - 不安全 C# : How can I create an int[] from a pointer to a preexisting memory location?

转载 作者:行者123 更新时间:2023-11-30 22:30:06 25 4
gpt4 key购买 nike

我在不安全类中使用共享内存进行进程间通信。保留一部分内存用于存放固定的 int 数组。

基本上,我有一个设置共享内存的方法。像这样:

private int* sizePtr;

private ???* arrayPtr;

void SetupMemory(byte *pointerToSharedMem)

{

this.sizePtr = (int*)pointerToSharedMem;
pointerToSharedMem += sizeof(int);

this.arrayPtr = (???*)pointerToSharedMem;
pointerToSharedMem += sizeof(int) * FixedSizeOfArray;
}

我需要如何声明指针才能使用属性

public int[] MyArray
{
get
{
return some magic with this.arrayPtr;
}
}

预计到达时间:如果可能的话,我想避免结构,我绝对想避免复制数据。我希望某种类型的转换构造使用指向共享内存中数据的指针,以便可以立即使用数据(即无需复制)。

最佳答案

其实我还能想到另一个答案。

不过,如果你不正确地使用它,这很可能会变得丑陋。

小心!

public unsafe class UnsafeArray
{
private readonly int* _start;
public readonly int Length;

public UnsafeArray(int* start, int enforceLength = 0)
{
this._start = start;
this.Length = enforceLength > 0 ? enforceLength : int.MaxValue;
}

public int this[int index]
{
get { return _start[index]; }
set
{
if (index >= this.Length)
{
throw new IndexOutOfRangeException();
}

_start[index] = value;
}
}
}

关于c# - 不安全 C# : How can I create an int[] from a pointer to a preexisting memory location?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9866231/

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