면접 준비로 공부했던 것들(2)
https://littlebinsuishere.tistory.com/m/14
면접 준비로 공부했던 것들(1)
필자: 전자전기공학부 4학년 졸업 예정, 올해 7월 말 취직 여름 휴가를 맞이하여(회사 1주일 다님)면접 준비로 공부했던 것들을 간단히 정리해보는 시간을 가져보겠습니다. . . !부족한 것들은 차
littlebinsuishere.tistory.com
1편에서 이어집니다. (TMI: 표지 이미지는 옛날에 했던 드래곤빌리지 어쩌구,,,에서 만든 마을)
4. 프로세스(process), 스레드(thread), 프로그램 카운터(pc)
하드디스크(ROM)에 저장되어 있는 정적인 상태의 프로그램을 꺼내와서, RAM에 적재(프로그램 로딩)되는 과정을 프로그램이 실행되었다고 한다. 프로그램 자체의 코드 + 프로그램 정보를 가져와서 RAM에 적재되어 있는 상태를 프로세스라고 한다.
프로세스 안 함수(예들 들어 main 함수)를 프로세스 안의 PC(Program Counter)가 가리켜 코드가 실행되면, 스레드(thread)가 생기고 main 함수가 실행된다.
* 프로세스와 스레드는 독립적인 흐름을 가지고 있고, 각각 PC를 따로 가지고 있다.
5. 프로그램 빌드 과정
Build: 소스 코드 파일을 실행 가능한 소프트웨어 결과물로 만드는 과정으로, 전처리->컴파일->어셈블->링크의 과정을 거쳐 실행 가능한 exe 파일을 만들어내는 과정이다.
1. 전처리(preprocess)
소스코드의 main 함수를 실행하기 전 준비 과정으로 #define, #include를 처리해준다.
2. 컴파일(Compile) - 컴파일러(ex. gcc, g++, Visual C++)
고수준 언어로 쓰여진 소스 코드를 저수준 언어인 어셈블리어로 번역해주는 과정.
3. 어셈블(Assemble)
어셈블리어를 기계어로 번역해주는 과정. 어셈블 후 object 파일(.o)이 생긴다. 연관된 파일 각각이 번역되어 최종 실행 파일의 일부가 되기 때문에 object라고 이해하면 될 거 같다.
4. 링크(Link)
Object 파일들과 필요 라이브러리들을 연결해 하나의 실행가능 파일(.exe)로 만들어주는 과정.
6. 메모리 구조(stack, heap), 전역 변수 / 지역 변수, extern(전역 변수 선언)
* 메모리(RAM) 구조
code(text) |
R/O(data) - const 변수(상수, 프로그램 off 후 사라짐) |
R/W(data) - 전역 변수 |
heap - malloc 동적 할당/ 런타임(사용자가 동적할당하기 때문) / 동적 할당 data - 객체, 배열, ... |
stack - 지역 변수(함수 실행 후 사라짐) / 컴파일 / 지역적 data - 함수, 지역 변수, 매개 변수 / stack pointer, LIFO, push/pop |
전역 변수 | 지역 변수 |
다른 파일, 함수에서 접근 가능 | 해당 함수 내에서만 쓸 수 있다 |
* 다른 파일의 전역 변수를 사용할 때, extern을 사용하여 변수를 선언해준다.
ex) file_a.c의 int a = 0;을 file_b.c에서 사용하려고 할 때 extern int a;로 선언해 사용한다.
근데 이러면 파일마다 선언해줘야 하는 번거로움이 있으므로 헤더파일 head.h에 extern int a;로 선언해주고, 해당 코드파일 file_b.c에 헤더파일 head.h을 include 하는 방식으로 사용한다.
* #define 처리(매크로 상수, 매크로 함수)를 하면 컴파일 과정 시 text 형식으로 처리해 코드 실행 시 치환되어 code 영역에 들어간다. 이는 변수를 위한 메모리 할당을 해주지 않아도 되기 때문에 메모리 용량 관리에 큰 도움을 준다.
3편으로 이어집니다!