F #에는 NativePtr 모듈이 있지만 System.IntPtr과 마찬가지로 '추가/가져 오기/설정 기능을위한 32 비트 오프셋 만 지원하는 것 같습니다.포인터에 64 비트 오프셋 추가
F #에서 기본 포인터 (nativeptr < 'a>)에 64 비트 오프셋을 추가하는 방법이 있습니까? 물론 모든 주소를 64 비트 정수로 변환하고 일반 정수 연산을 수행 한 다음 결과를 nativeptr < 'a>에 다시 변환 할 수 있지만 추가 및 imul 명령어가 추가로 발생합니다. AGU가 주소 계산을 수행하기를 정말로 원합니다. 이 유형 매개 변수에 대한 "관리되지 않는"제약이 없지만, 때문에 실제로 , 수 없습니다 적어도 당신이 할 수있는 당신이
void* ptr = Marshal.AllocHGlobal(...).ToPointer();
int64 offset = ...;
T* newAddr = (T*)ptr + offset; // T has to be an unmanaged type
음과 같은 일을 할 수있는 C#으로 안전하지 않은 사용 예를 들어
, 비 일반 일반 포인터 연산 방식.
F #에서는 마침내 관리되지 않는 제약 조건이 있습니다. 하지만 포인터 연산은 어떻게해야합니까?
처음에는 "너는 그렇게 할 수 없다"는 생각이 들었지 만 포인터의 오프셋을 다시 생각해 보면 커다란 메모리가 연속적으로 할당되어 있다면 포인터 오프셋 만 이해할 수 있습니다. 4GiB보다 큰 연속 할당 배열의 사용 사례는 무엇입니까? – sblom
@sblom : 이미징 데이터는 쉽게 4 GiB를 초과 할 수 있습니다.) 물론 데이터 등을 파티션 할 수 있습니다. 하지만 할당 된 연속 메모리의 양을 더 많이 사용할 수 있다면 어떻게하는지 알고 싶습니다. – Frank