더 나은 세상

object 파일이란 본문

컴퓨터 프로그래밍

object 파일이란

leemark 2018. 12. 16. 02:20

이번에 게시할 내용은 compiler를 공부하면서 그동안 몰랐었던 내용과 헷갈렸던 부분을 다시 확인하기 위해서에요.


compiler를 처음 알았던건 대학교 1학년 첫 수업시간에 visual studio라는 프로그램을 교수님이 설명을 하면서 들었어요

compiler는 넓게 이야기하면 한 언어에서 다른 언어로 바꿔주는 것을 말하고

프로그램의 실행에 관해서 이야기할 때는 c나 java같은 high level언어에서 assembly언어로 바꿔주는 것을 말해요

우리의 눈에는 cout이나 printf같은 함수가 출력을 의미한다는 걸로 보이지만 컴퓨터 입장에서는 무슨 소리인지 알 지 못해요.

그래서 0과 1로 바꿔 주어야 하는데 그 과정중에 있는게 compiler라고 합니다.

assembly언어는 아직 컴퓨터가 이해하지 못하는 언어이지만 한단계만 더 거친다면 0과 1로 이루어진 언어로 바꿔줄 수 있어요

이 과정을 assembling이라고 하는데 이 역할은 assembler라는게 도와줘요

요약하자면 우리가 짠 helloworld.cpp를 compiler가 assembly로 바꿔주고 이를 assembler가 0,1로 이루어진 언어로 바꿔줘요

그리고 0,1로 이루어진 언어를 object파일이라고 불러요


오브젝트 파일의 메모리는 4가지 영역으로 나뉘는데 stack, heap, static, code라는 이름을 가지고 있어요. code영역부터 0으로 주소가 시작하는데 만약 linker가 여러개의 object파일을 하나의 exe파일로 만들경우 exe파일의 메모리도 똑같이 4가지 영역을 나누어지게 돼고 이를 relocation이라는 용어로 부르게 됩니다.


stack은 지역변수 heap은 동적할당, static은 전역변수(global var), code는 변수이름을 가지고 있어요