안전하지 않은 코드의 제한 사항은 C#입니까? 예를 들어, C 또는 C++을 사용하는 것처럼 사실상 임의의 포인터 캐스트 및 산술을 수행 할 수 있습니까?C#의 안전하지 않은 코드
답변
예. 안전하지 않은 상태 인 경우 All bets are off
검증 할 수있는 유형의 "안전성"이 제거되었으며 런타임이 없으면 한 유형의 포인터에서 다른 유형의 포인터로 변환 할 수 있습니다. shooting yourself in the foot 그래서 욕망 - C 또는 C++과 매우 비슷합니다. 여기
는 C#으로 다른 포인터 타입을 사용의 예 : 배열의 유형Byte[]
입니다
fixed (Byte* dstBytes = ¤tImage[0])
{
var dstBuffer = (Int64*)dstBytes;
const int blockCount = ImageSizeInBytes/sizeof(Int64);
for (var j = 0; j < blockCount; j++)
{
dstBuffer[j] = srcBuffer[j];
}
}
참고,하지만 난 Byte*
를 얻을 후 나는 Int64*
에 캐스팅과에서 8 바이트로 작업 할 수 있습니다 시각.
예, 원하는 곳에 포인터를 지정할 수 있습니다.
그러나 프로그램이 가상 주소 공간에서 실행 중이므로 해당 공간에 실제로 존재하는 메모리에만 액세스 할 수 있습니다. 즉, 다른 프로세스에 액세스 할 수 없으며 ' t 할당되었습니다.
당신은 자세한 내용은 다음 페이지를 참조 할 수 있습니다
http://msdn.microsoft.com/en-us/library/y31yhkeb.aspx
안전하지 않은 코드는 거의 모든 원시 변수 (기본 유형) 포인터를 선언 할 수있는 기능을 제공합니다; 당신은 포인터 타입들 사이에서 캐스트 할 수 있습니다. 포인터 산술은 포인터 유형의 저장소 크기를 기반으로하므로 포인터에 후 증가 또는 후 감소를 적용하면 sizeof (유형)에 따라 주소가 증가합니다.
예, 가능합니다. MSDN의 Unsafe Code Tutorial은 다음과 같습니다.
이 모든 것을 사용하는 방법은 끔찍한 생각입니다. 예,하지만 이유가 있습니다. 저는 최근에 (처음으로) Byte *
을 반환 한 타사 API를 통해 웹캠 데이터를 가져와야했습니다.
- 1. - 안전하지 않은 코드, IntPtr입니다
- 2. Gendarme 안전하지 않은 코드 감지
- 3. IntPtr 및 안전하지 않은 코드 피하기
- 4. .NET 마이크로 프레임 워크 안전하지 않은 코드
- 5. 안전 인덱싱 내부 안전하지 않은 코드
- 6. 안전하지 않은 방식으로 Uploadify
- 7. 안전하지 않은 Crytographic 시스템
- 8. 안전하지 않은 일반적인 캐스트
- 9. 안전하지 않은 '^'jshint 문제
- 10. JSLint "안전하지 않은 문자"
- 11. Android의 안전하지 않은 클래스입니까?
- 12. 스레딩 및 안전하지 않은 변수
- 13. C# 프로젝트 설정의 실제 기능은 무엇입니까? "안전하지 않은 코드 허용"
- 14. 안전하지 않은 코드 및 스택 alloc을 사용할지 여부에 대한 혼란
- 15. WPF 셸 끌어서 놓기 샘플 - 안전하지 않은 코드
- 16. 안전하지 않은 Java 인터페이스 구현
- 17. 안전하지 않은 포인터/배열 표기법
- 18. 안전하지 않은 문자를 제거하여 파일을 저장하는 방법
- 19. 안전하지 않은 JavaScript 코드를 분리하는 방법
- 20. 산술 연산이 안전하지 않은 C#을
- 21. 마샬링 C의 DLL 코드
- 22. objective-c의 이상한 코드
- 23. WebKit "안전하지 않은 헤더 'content-length'설정을 거부했습니다."
- 24. 더 빠르고 (안전하지 않은) .NET의 BinaryReader
- 25. "안전하지 않은 머리글 설정 거부 : 연결"방법
- 26. C# 안전하지 않은 컨텍스트/포인터 형식의 LPWStr
- 27. 안전하지 않은 실수로 세션 하이재킹 문제가 발생했습니다.
- 28. 안전하지 않은 코드가있는 클래스 가져 오기
- 29. 여기에 검사되지 않고 안전하지 않은 작업은 무엇입니까?
- 30. 스레드가 안전하지 않은 .NET 큐 개체는 어떻게됩니까?
+1 링크 용으로 (그리고 좋은 대답). – Sam