2009-05-05 4 views
1

동적 언어는 변수에 할당 할 메모리 양을 어떻게 결정합니까? 예. 컴파일러는 너무 많은 메모리 오버 헤드없이 variable = 5를 variable = "xxx"로 어떻게 변경합니까? 언제 하드웨어 스택을 사용하고 언제 메모리 힙을 사용합니까?동적 언어 및 변수 할당

답변

4

컴파일러는 각 변수에 포인터가 들어갈 수있는 충분한 메모리와 언어 런타임에 필요한 메타 데이터를 할당합니다. 하지만 각 메모리에 얼마나 많은 메모리가 할당되어 있는지 묻고 싶습니다. 오브젝트. 이 경우 대답은 객체 유형에 따라 다릅니다. 변수가 다른 객체에 할당되면 해당 변수와 연결된 포인터가 포인터의 의미를 변경합니다.

1

답변은 물론 언어에 따라 달라집니다 - 호스트 된 동적 언어와 저수준 구현 언어 둘 다. 펄에 적용되는 것은 파이썬에 반드시 적용되는 것은 아니며 Tcl에 적용되는 것이 자바 나 LISP에 적용 되는가 아니면 ... 음, 동적 언어로 간주 되나요?

Perl에는 SV 값 (스칼라 변수)이있는 C 레벨 구조가 있는데, 변수 값의 다른 버전에 대해 다른 저장소가 포함되어 있습니다. 이들은 종종 힙 기반입니다. 문자열에 대한 저장소는 항상 힙 기반으로 끝나지 만, 문자열로 변환 된 적이없는 순수한 숫자 값은 엄격하게 스택에있는 SV에있을 수 있습니다. 펄에서는 이러한 것들이 참조 카운트 (그리고 mortalized, 또는 불후의, 그리고 다른 종류의 다른 흥미로운 용어)입니다. 더 복잡한 유형 (AV, HV, RV 등)은 SV를 기반으로합니다.