나는 이것이 "프로그래밍"이 아니라고 생각하지만, 잠시 숙고 해왔다. 변수를 만들고 값을 할당 할 때 컴퓨터는 해당 변수에 대해 특정 바이트 수를 할당하고 값을 저장하지만 나중에 다시 사용할 때 해당 메모리 주소에있는 데이터의 유형을 어떻게 알 수 있습니까?컴퓨터는 특정 메모리 위치가 저장하는 데이터 유형을 어떻게 추적합니까?
답변
일반적으로 그렇지 않습니다. 음, 대부분의 동적 언어는 typeof
과 비슷합니다. 따라서 일반적으로 유형 (및 참조 정보와 같은 기타 정보)을 비롯하여 일부 메타 데이터를 저장하는 '객체 헤더'가 있습니다. 하지만 여전히 임의의 메모리 덩어리로 객체의 시작을 식별 할 수는 없으므로 (항상 1과 0 모두이므로) 포인터를 항상 필요로합니다 ...
전통적인 정적/컴파일 된 언어 (대개 물론)는 그러한 정보를 저장하지 않습니다. 결국, 컴파일러가 x
이 int
이라는 것을 알고 있다면 레지스터에로드하는 데 필요한 바이트 수와 additon에 사용할 opcode를 알고 있습니다. 가상 함수를 추가하는 경우에도 함수 포인터 테이블을 컴파일하기 만하면됩니다 (메타 데이터가 필요하지 않음 - obj->foo()
은 "이 주소의 호출 코드"대신 "vtable의 n 번째 항목 가져 오기 및 호출"로 변환 됨).
컴퓨터가 아닙니다. 일부 언어는 데이터를 유형 (특히, 변수가 모든 데이터 유형을 저장할 수있는 동적 언어)으로 태그 지정할 수 있습니다. 다른 언어 (예 : C)에서는 변수를 선언하고 컴파일러는 해당 변수와 연관된 주소 공간을 사용하여 값을 특정 유형으로 처리 할 때마다이를 알고 있습니다. 컴퓨터 자체는 신경 쓰지 않아도 바이트 당 8 비트가 보입니다.
답변은 귀하가 작업중인 언어가 해석되는지 또는 다양한 기타 세부 사항에 따라 다릅니다. C와 같은 컴파일 된 언어의 경우, 컴파일러는 코드를 기계어 (또는 어셈블러)로 변환하는 동안 내부 데이터 구조를 사용하여 모든 변수가 무엇인지, 유형이 무엇인지, 저장되어 있는지, 아마도 최적화 목적으로 다른 정보도 있습니다. (그러나 코드가 실제로 실행될 때까지는 정보가 모두 사라지지만 코드를 컴파일하고 실행하지 않아야합니다.)
일부 해석 된 언어의 경우 인터프리터는 비슷한 데이터 변수가 사용될 때마다 조회되는 구조. 어떤 경우에는 모든 변수가 통역사에 의해 동일한 방식으로 취급되지만, 값인에는 유형 정보가 첨부됩니다.
- 1. C에서 메모리 사용을 어떻게 추적합니까?
- 2. 컴퓨터는 어떻게 화면을 그립니다.
- 3. UIImage - 어떻게 색인을 추적합니까?
- 4. 특정 드라이브의 유형을 어떻게 결정합니까?
- 5. 쿼츠는 시간을 어떻게 추적합니까?
- 6. QRcode 사용을 어떻게 추적합니까?
- 7. 각 setInterval주기를 어떻게 추적합니까?
- 8. 디자이너를 어떻게 추적합니까?
- 9. Linux에서는 사전 빌드 된 소프트웨어의 메모리 누수를 어떻게 추적합니까?
- 10. 레지스터 기반 가상 컴퓨터는 어떻게 작동합니까?
- 11. 첫 번째 예외 - 메모리 위치가 길어 집니까?
- 12. valgrind는 드라이버를 통해 메모리 초기화를 추적합니까?
- 13. Windows USER 개체 누수를 어떻게 추적합니까?
- 14. Python에서 애니메이션 객체를 어떻게 추적합니까?
- 15. Firefox 경고 메시지를 어떻게 추적합니까?
- 16. 데이터베이스 변경 사항을 어떻게 추적합니까?
- 17. linq2sql은 데이터베이스 객체를 어떻게 추적합니까?
- 18. X11에서 관련 창을 어떻게 추적합니까?
- 19. UINavigationController는 어떻게 여러 UIViewController를 추적합니까?
- 20. 앱이 표시되는 시간을 어떻게 추적합니까?
- 21. 어떻게 PHP로 세션 시간을 추적합니까?
- 22. BufferedReader는 읽은 행을 어떻게 추적합니까?
- 23. 특정 유형을 반환하는 템플릿
- 24. 닫히지 않은 고아 JDBC 연결을 어떻게 추적합니까?
- 25. 메모리 위치가 CPU 캐시에 있는지 확인하십시오.
- 26. iPhone 앱 사용자 수를 어떻게 추적합니까?
- 27. 외부 링크를 클릭 한 횟수를 어떻게 추적합니까?
- 28. SOA에서 웹 서비스 소비자 종속성을 어떻게 추적합니까?
- 29. Git을 사용하여 .txt 파일을 어떻게 추적합니까?
- 30. 파이썬의 데이터 유형을 결정?