지금은 stackalloc
이 올바른 방법 일 것이라고 생각했지만 실패했습니다. 가장 중요한 것은, 나는 이제 그것이 실패 할 운명이라는 것을 알고 있습니다. 내가하고 싶은 일을 할 수있는 방법이 없습니다.
이
는 질문을 재 작성 볼 수 있습니다 :
어떻게이 '안전하지 않은'배열 주위에 관리되는 배열을 만들 수 있습니까?
관리되는 배열은 헤더 정보를 가지고 있으므로 (메모리 척 주위의 클래스이기 때문에) 배열 자체보다 메모리에 더 많은 공간이 필요합니다. 따라서 대답은 다음과 같습니다.
관리되는 배열이 메모리에 저장되는 방식에 따라 (관리되는 배열의 방식에 따라?) 배열 자체를 공간에 할당하고 관리되는 정보 (길이 등)를 '안전하지 않은 배열.
배열 주위에 충분한 데이터가 있기 때문에 불안정합니다. 이것은 쉽게 가능하지 않습니다. 관리되는 바이트 []가 배열 주위에 데이터가 있다는 의미로 전달 되었기 때문에 특정 데이터에서 충분한 공간이있을 수 있지만 동일한 데이터가 관리되는 double []에 적절하다는 것을 주장하는 것이 가장 바람직하지 않지만 대부분 데이터를 변경하여 관리되는 이중 []에 적합하도록하는 것은 나쁜 일입니다.
[편집] 그것은 Marshal.Copy
처럼 보이는
여기에 갈 수있는 방법입니다. 새로운 배열을 만들고하자 원수가 그들을 (그가 나보다 빠를 것, 또는 아마도 일부 나중에, 그는 빨리 될 것으로 기대하고) 복사 : 일반적으로
var ret = new double[_raw_data.Length/sizeof(double)];
System.Runtime.InteropServices.Marshal.Copy(new System.IntPtr(_pret), ret, 0, ret.Length);
Interop를 다루는 Marshaller에 당신입니다 친구, System.Runtime.InteropServices.Marshal에서 서비스하십시오. 배열을 사용하기 위해 특별히 필요한 것은 무엇인지 모르겠다. 그러나 포인터 산술을 사용하여 배열에 액세스 할 수 있습니다. 아마 이것은 당신을 올바른 방향으로 암시합니다. – OregonGhost
@daGhost - 포인터를 사용하여 배열에 액세스하는 방법을 알고 있지만 관리되는 배열을 마샬링해야합니다. 감사. –
@Limited Thing (다시 daGhost라고하지 마십시오.) : 포인터로 배열 요소에 액세스 할 수있는 경우 값을 관리 배열에 복사 할 수 있습니다. – OregonGhost