2009-02-24 3 views
6

,스크립팅 언어의 변수에 대한 메모리 할당은 어떻게됩니까? 자바 스크립트 예를 들어

나는

x = 'a'; 

하고 그럼

x = "hello"; 

을 할 수

var x = 5; 

나중에 말할 수있는, 메모리 변수에 할당하는 방법 ? 그대로, 모든 변수는 일반적인 유형 'var'을 가지며 변수의 값은 위에서 보았 듯이 런타임에 변경 될 수 있습니다. 이러한 변수에 대한 메모리를 할당하고 관리하는 것이 어려운 작업이 아닌가? 정확히 어떻게 했습니까?

+0

이 스택 오버플로 참고 사항 [변수가 자바 스크립트에서 메모리를 할당하는 방법은 무엇입니까?] (http://stackoverflow.com/questions/2800463/how-variables-are-allocated-memory-in-javascript) 특히 R. Kent Dybvig의이 논문 [Scheme의 3 가지 구현 모델] (http://www.cs.unm.edu/~williams/cs491/three-imp.pdf)에 대한 링크. –

답변

3

파이썬은 기본적으로 값에 카운터를 넣는 reference counting이라는 기술을 사용합니다. 값에 대한 참조가 만들어 질 때마다 카운터가 증가합니다. 값을 참조하지 않으면 (예 : 'x'에 새 값을 지정할 때) 값은 감소합니다. 카운터가 0에 도달하면 값에 대한 참조가 존재하지 않으며 할당을 취소 할 수 있음을 의미합니다. 이것은 단순한 설명이지만 적어도 기본 사항입니다.

+0

그래서 x는 무엇으로 처리 될까요? 내가 x = 5라고 말할 때, 할당 중에 int 또는 문자열로 처리 될 것인가? 타입 정보는 어디에 저장 될 것인가? –

+0

변수가 할당되고 유형 정보가 저장되는 방법은 구현에 따라 다릅니다. 구현 방법을보고 싶다면 Rhino : JavaScript for Java http://www.mozilla.org/rhino/를 다운로드하십시오. –

+0

이것은 CPython에서만 유효하며 가비지 수집도 무시합니다. 고쳐야 해. – Antimony

1

어쩌면이 link은 자바 스크립트에서 더 많은 통찰력을 제공합니다.

0

글쎄, 변수는 컴파일 타임에 할당되는 불변 문자열에 대한 참조입니다.

물론 VM에 달려 있지만, 대부분의 C 기반 스크립팅 언어는 큰 메모리 블록을 할당하고 필요에 따라 확장하고 자체 할당을 수행하며 드물게 다시 제공합니다. O/S에. 특히 거의 모든 어휘가있는 어휘 적 범위 언어에서 변수는 모두 C 스택과 비슷한 것이 아니라이 블록 내에서 동적으로 할당되며 레퍼런스 카운팅 또는 가비지 수집기로 해제됩니다.

스크립팅 언어가 JVM 또는 .NET 또는 그와 유사한 것 (Parrot?)에서 실행되는 경우 변수를 만드는 것은 단지 Java 객체와 같은 것을 만드는 것입니다. 객체에 대한 참조가 없으면 가비지 컬렉터가 메모리를 회수합니다.

+0

VM이 이스케이프 분석을 수행하고 때때로 스택에 개체를 할당하는 경우는 예외입니다. – Antimony