2010-05-18 2 views
3

메모리에 대해 조금 더 알고 싶습니다. Google에서 찾지 못했습니다. 바보 같은 질문이 있으면 용서해주세요.첫 번째 메모리 주소에 대한 널 참조 0-65535

방법 NullReferenceException이를 슬로우 메모리 주소 0에 접근 (65535까지) C#에서 다음 코드를 올

바이트 * 포인터 = (바이트 *) 0;

바이트 테스트 = * 포인터;

미리 감사드립니다.

+0

주소가 작동합니까 아니면 NRE를 모두 던집니까? –

+0

0-65535 사이의 모든 주소는이 예외를 throw합니다. 16 비트 시스템 간의 충돌을 방지하기 위해 예약되어 있습니까? – Terry

+0

핵심 단어는 "가상 메모리"입니다. 운영 체제 디자인에 관한 모든 서적에서 그 의미를 알 수 있습니다. –

답변

3

이것은 Windows 자체의 디자인 기능입니다. 개발주기 초기에 프로그래머의 실수를 잡기 위해 0에서 64K (-1)까지의 가상 주소는 모든 프로세스에서 유효하지 않습니다.

+0

"모든 프로세스에서 0 - 64K (- 1)의 가상 주소가 유효하지 않습니다."라는 것이 무슨 뜻인지 물어볼 수 있습니다. 이것이 실제 주소라고 생각했기 때문에 많은 감사드립니다! – Terry

+0

참고 자료가 있으십니까? –

+3

Terry, Windows를 실행하는 경우 "실제"주소가 실제로 존재하지 않습니다. 간단한 방법은 각 응용 프로그램이 자신의 x86, x64 컴퓨터에서 실행되고 있다고 생각한다는 것입니다. 자체 주소 공간이 있습니다. ..so .. 한 응용 프로그램에서 0xDEADBEEF라고하는 포인터는 다른 메모리 주소 0xDEADBEEF를 가리 키지 않습니다. 재미 있지 않습니까? :) – Rusty