2010-04-22 8 views
3
  • C#에서 operator new를 사용하면 실패 할 수 있습니다 (예 : 대용량 메모리가 필요한 경우)? -solved-
  • 그리고 그것을 발견하는 방법? -Solved-
  • 새로운 연산자가 던질 수있는 다른 오류는 무엇입니까?

감사C# 메모리 할당

+0

int [] x = new int [100000000000]과 같은 한 줄짜리를 작성하고 무슨 일이 일어나는 지보십시오! –

답변

4

생성자는 당신이 상상할 수있는 모든 예외를 던질 수있는 호출하는 new 연산자를 던졌습니다. 예를 들어 내부에 생성자가 큰 것을 할당하려고 시도하면 그 예외가 잡아서 좀 더 이국적인 것으로 다시 제기 될 수 있습니다.

물론 메모리 부족 현상이 나타나기 시작하면 프로세스가 만성적으로 아프다고 생각하고 최대한 빨리 그 불행에서 벗어나야합니다.

생성자은, 반대로 모든 소문에도 불구하고, 클래스도 null을 반환 할 수 있습니다 -하지만 병리에 접경 극단적 인 에지 경우입니다.

+0

악의적 인 프록시에서만 Null을 반환합니다. 다른 곳에서 언급 한 리디렉션이나 다른 희귀하고 비 악의적 인 수단을 통해 발생할 수 있습니까? –

+0

@Dan - 우리는 포함되지 않습니다 가정은'null 허용 는'다음 예 - 나쁜 프록시는 내가 알고있는 유일한 방법입니다. –

1

(이 큰 메모리를 필요로하는 경우) 실패 할 수 있습니다 C#에서 new 연산자를 사용합니까?

예. 고갈 될 가능성이있는 리소스는 메모리가 아닌 주소 공간입니다.

어떻게 발견합니까?

나는 그 질문을 이해하지 못한다.

+0

아마도 질문은 "방지하는 방법"이었습니다. –

+0

@Eric은 Java와 같은 (null 참조) 경우 또는 예외를 발생시키는 경우를 의미합니다 ... – Betamoo

+0

@TriLi 이것은 더 나은 질문입니다. – Betamoo

9

new이 실패하면 OutOfMemoryException이 표시됩니다. 또한 생성자 자체는 구현에 따라 예외를 throw 할 수 있습니다. 에서 OutOfMemoryException에 대한 MSDN 문서에서

:

다음 Microsoft 중간 (MSIL) 명령이 던져 에서 OutOfMemoryException :

  • 상자

  • newarr

  • NEWOBJ는