2011-03-27 2 views

답변

4

일반적으로 그렇지 않습니다. 음, 대부분의 동적 언어는 typeof과 비슷합니다. 따라서 일반적으로 유형 (및 참조 정보와 같은 기타 정보)을 비롯하여 일부 메타 데이터를 저장하는 '객체 헤더'가 있습니다. 하지만 여전히 임의의 메모리 덩어리로 객체의 시작을 식별 할 수는 없으므로 (항상 1과 0 모두이므로) 포인터를 항상 필요로합니다 ...

전통적인 정적/컴파일 된 언어 (대개 물론)는 그러한 정보를 저장하지 않습니다. 결국, 컴파일러가 xint이라는 것을 알고 있다면 레지스터에로드하는 데 필요한 바이트 수와 additon에 사용할 opcode를 알고 있습니다. 가상 함수를 추가하는 경우에도 함수 포인터 테이블을 컴파일하기 만하면됩니다 (메타 데이터가 필요하지 않음 - obj->foo()은 "이 주소의 호출 코드"대신 "vtable의 n 번째 항목 가져 오기 및 호출"로 변환 됨).

2

컴퓨터가 아닙니다. 일부 언어는 데이터를 유형 (특히, 변수가 모든 데이터 유형을 저장할 수있는 동적 언어)으로 태그 지정할 수 있습니다. 다른 언어 (예 : C)에서는 변수를 선언하고 컴파일러는 해당 변수와 연관된 주소 공간을 사용하여 값을 특정 유형으로 처리 할 때마다이를 알고 있습니다. 컴퓨터 자체는 신경 쓰지 않아도 바이트 당 8 비트가 보입니다.

5

답변은 귀하가 작업중인 언어가 해석되는지 또는 다양한 기타 세부 사항에 따라 다릅니다. C와 같은 컴파일 된 언어의 경우, 컴파일러는 코드를 기계어 (또는 어셈블러)로 변환하는 동안 내부 데이터 구조를 사용하여 모든 변수가 무엇인지, 유형이 무엇인지, 저장되어 있는지, 아마도 최적화 목적으로 다른 정보도 있습니다. (그러나 코드가 실제로 실행될 때까지는 정보가 모두 사라지지만 코드를 컴파일하고 실행하지 않아야합니다.)

일부 해석 된 언어의 경우 인터프리터는 비슷한 데이터 변수가 사용될 때마다 조회되는 구조. 어떤 경우에는 모든 변수가 통역사에 의해 동일한 방식으로 취급되지만, 값인에는 유형 정보가 첨부됩니다.

관련 문제