ㅁ C언어는 컴파일러에 의해 소스파일(*.c)이 목적파일(*.obj)로 변환될 때 바이너리 파일이 됨.
ㅇ"바이너리 파일이 된다"는 것은 숫자 0과 1로 이루어진 코드로 변환됨을 의미.(마치 매트릭스)
ㅇ즉, 컴파일을 하면 컴퓨터가 이해가능한 이진코드로 변환됨.
ㅁ목적파일(*.obj)은 기본적으로 컴퓨터가 이해가능한 바이너리 코드(이진 코드)의 형태지만 실행불가함.
ㅇ그 이유는 완전한 기계어(=CPU에서 사용하는 명령어 집합) 이 아니기 때문.
ㅁ변환된 목적파일(바이너리파일)은 링커에 의해 실행 가능한 실행파일(*.exe)로 변환될 때
ㅇ함수나 헤더 파일 등의 실제 메모리 주소를 코드에 반영하는 과정에서 일부 주소값이 변경되는데,
ㅇ이 과정을 거쳐야 비로소 컴퓨터가 바로 실행 가능한 100% 기계어가 됨.
ㅁ목적파일은 바이너리 코드지만 컴퓨터가 바로 실행가능한 100% 기계어라고 할 수 없음.
ㅇ완벽한 100% 기계어는 실행파일뿐
※ 하지만 java에서는 컴파일러(javac)에 의해
※ 소스파일(*.java)이 목적파일(*.class)로 변환될 때
※ 컴퓨터가 바로 인식가능한 바이너리 코드가 아닌 바이트 코드로 변환된다.
1. 바이너리 코드 : 컴퓨터가 인식가능한 0과 1로 구성된 이진코드.
2. 기계어 :
1) 기계어는 0과 1로 이뤄진 바이너리 코드.
2) 기계어가 이진코드로 이뤄졌을 뿐, 모든 이진코드가 기계어인 것은 아님.
3) 기계어는 특정언어가 아님.
- CPU제조사에서 CPU제작 시 해당 CPU에서 사용하는 명령어 집합을 공개함. = 기계어(명령어집합)
- 고로, CPU가 다르면 기계어도 다른 것.
- 같은 동작을 하는 명령어지만 완전히 다른 0과 1의 나열이 될 수 있음.
4) 아주 기본적인 연산자들은 서로 호환 되는 편.
5) 같은 회사의 CPU라도 버전 별 다른 명령 포함가능하며, 다른 회사라도 같은 명령어 집합 공유 가능.
3. 바이트 코드 : 가상머신에서 이해할 수 있는 코드를 위한 이진 표현법(0과 1로 구성)
1) CPU가 이해할 수 있는 언어가 바이너리 코드, 가상 머신이 이해할 수 있는 언어는 바이트 코드.
2) 어떤 플랫폼에도 종속되지 않고 실행가능한 가상 머신용 기계어 코드.
3) 고급언어로 작성된 소스코드를 가상 머신이 이해가능한 중간 코드로 컴파일한 결과.
4) 실시간 번역기 또는 저스트 인 타임(just in time, JIT) 컴파일러에 의해 바이너리 코드로 변환됨.
5) CPU가 텍스트를 이해하지 못하듯, 가상 머신 또한 텍스트를 이해하지 못함.
cf) java 가상 머신이 JVM, JVM을 위한 바이트 코드를 자바 바이트 코드라고 함.
#. 플랫폼 : 개발환경, 실행환경 등 어떤 목적 수행가능한 환경.
- 프로그램이 실행되는 환경인 운영체제의 종류 : window, mac
- 개발이 수행되는 환경의 종류 : 안드로이드 스튜디오, 비쥬얼 스튜디오.
'2019' Blockchain developer class' 카테고리의 다른 글
[기본] Express관련 (0) | 2019.10.21 |
---|---|
[기본] 토큰과 ERC 20_OMG, NPXS, VEN 등 (0) | 2019.08.04 |
[이오스] 우분투 이오스 설치 및 윈도우 환경설정 (0) | 2019.07.29 |
[기본] 이더리움 계정과 트랜잭션_ CA, EOA, TX (0) | 2019.07.26 |
[기본] 컨센서스(consensus)_PoW, PoS, DPoS (0) | 2019.07.25 |