2013-07-18 2 views
3

이 질문은 .NET에 관한 것이지만 일반적으로 적용되는 것 같습니다. 새 객체가 인스턴스화되면 해당 객체의 함수에도 메모리가 할당됩니까? 그들이 나중 시점까지 부름을받지 않더라도?개체의 기능 및 속성에 별도의 메모리가 할당 되었습니까?

다르게 말하면 동일한 멤버 변수를 가진 두 개의 클래스가 있지만 그 안에 더 많은 메서드가있는 클래스는 인스턴스화시 더 많은 메모리를 차지합니까?

+0

분명히 각 인스턴스의 멤버 변수는 값이 다르므로 다른 스토리지가 있어야합니다. 맞습니까? 각 인스턴스의 기능이 다를 것이라고 생각하십니까? 그렇다면 왜? – Gabe

+0

함수가 메모리를 할당하는시기는 명확하지 않습니다. 객체 인스턴스화시 또는 호출시? – bytefire

답변

7

개체 인스턴스은 할당 한 인스턴스의 상태를 나타냅니다. 따라서 내부에 정의한 모든 필드 및 속성의 복사본이 에 해당합니다.

주어진 형식에 대해 정의하는 메서드는 이라는 인스턴스 자체에서 다른 데이터 구조로 유지됩니다. 메서드 표. 할당 한 모든 단일 인스턴스는 해당 유형의 메서드 테이블을 가리키는 포인터가 있습니다.

enter image description here

당신이 방법에 함수를 호출

, 그것은 메모리에 모든 인수가 가능한 스택에 주소의 포인터를 필요한 양, 당기 기능, 푸시를 이동하고, 함수를 호출합니다. 이것에

더 여기서 읽을 수는 인스턴스화시에 더 많은 메모리를 차지하는 내부 이상의 방법으로 Drill Into .NET Framework Internals to See How the CLR Creates Runtime Objects

+0

링크에는 잡지 목록 만 있습니다. –

+1

위의 링크가 작동하지 않습니다. 웹에서 검색 한 후 여기에서 찾았습니다. 도움이되기를 바랍니다. http://blog.csdn.net/phiger/article/details/5566988 – Civa

1

클래스의 새 인스턴스를 만들면 해당 클래스의 모든 멤버가있는 해당 인스턴스에 대해 메모리가 할당됩니다. 당신의 질문에 관한 한 방법 (함수) 로컬 변수는 메서드가 호출 될 때만 할당됩니다.

당신은 here

+0

링크 고마워요 – bytefire

3

메모리는뿐만 아니라 방법이다 (인스턴스)의 속성에 할당되는 객체 생성의 정확한 세부 사항을 확인할 수 있습니다. 메서드의 메타 데이터와 코드는 아주 작은 메모리 조각으로 할당됩니다.

4
동일한 멤버 변수

하지만 하나?

아니요. 인스턴스에 필요한 공간은 필드에만 의존합니다.

이 메서드는 메모리도 필요하지만 클래스 당 한 번만 필요합니다. 정적 필드와 같습니다. 그 메모리는 클래스가로드 될 때 할당됩니다.

관련 문제