나는 왜 객체 (클래스)의 크기를 컴파일러가 알아야하는지 궁금했다. 나는 그것이 런타임에 연기 될 수 없다는 것을 의미합니다 - 객체가 정말로 필요할 때?컴파일러 (javac)가 객체의 크기를 알아야하는 이유는 무엇입니까?
감사
나는 왜 객체 (클래스)의 크기를 컴파일러가 알아야하는지 궁금했다. 나는 그것이 런타임에 연기 될 수 없다는 것을 의미합니다 - 객체가 정말로 필요할 때?컴파일러 (javac)가 객체의 크기를 알아야하는 이유는 무엇입니까?
감사
javac의 는는 객체의 크기를 알 수 없습니다. JVM은 이러한 세부 사항을 추상화합니다.
C 또는 C++와 같은 원시 컴파일 언어에서 컴파일러는 객체를 더 큰 구조체 안에 포함하거나 스택에 할당 할 때 객체의 크기를 알아야합니다. * 힙 할당의 경우 동적 인 크기의 객체를 가지고 있지만, 이것은 매우 위험하고 옳지 않습니다. C에서 이것은 전통적으로 구조체를 빈 배열로 끝내고 여분의 공간을 할당함으로써 이루어진다.
실제로 녹은 알려진 크기와 알 수없는 크기를 가진 형식을 구별합니다. 나중에는 제한된 상황에서만 사용할 수 있습니다. C/C++에는 기본적으로 불투명 포인터로만 사용할 수있는 불완전한 유형의 유사한 개념이 있습니다.
* 기술적으로 C는 스택에 가변 크기의 배열을 허용합니다.
감사합니다. 따라서 JVM은 실제로 (런타임에) 필요할 때 바로 객체의 크기를 결정하고 그 객체가 힙 또는 비 힙 영역에 있는지 여부는 중요하지 않습니다. 그리고 C++ 컴파일러의 경우 런타임에 스택을 할당 할 수있는 기회가 있습니까 (이론적으로는 스택 할당에 해당). – zgulser
@zgulser JVM은 원하는대로 할 수 있습니다. 실제로는 객체의 크기가 클래스 정의 (런타임에 한 번로드 됨)로 고정되고 최적화되지 않는 한 모든 객체가 힙 할당됩니다. 배열에는 특별한 처리가 있습니다. – Antimony
알았어요. 어떻게 배열이 처리됩니까? – zgulser