본문 바로가기

Study/C

1. 기초부터

일단 C를 이용하여 자료구조를 공부할 것이다.[각주:1]

CLion과 MingW를 깔았다. MingW에서는 C관련 플러그인들을 깔았고.

찾아보니 GNU는 리눅스같은 OS인데 어떻게 쓸 지 모르겠다.


| CPU


CPU. 중앙처리장치. input을 받으면 output을 내는 함수같은 존재다. 연산을 담당한다.

코어는 cpu의 핵심 부품 정도로 생각하면 된다. 클럭은 CPU의 속도랑 비슷한 개념이다. 클럭이 높을수록 같은 시간 내 처리하는 신호가 많다는 의미다.

참고로 CPU는 표준화가 되어 있지 않다. 인텔과 AMD는 다르다는게 이거였다.




| Assembly language [어셈블리어]


cpu는 연산을 담당한다고 했다. 연산에 번호를 붙여서 1번 연산, 2번 연산, 3번 연산...

힘들다. 그래서 이들에 이름을 붙여 준다. 명령(기계어)에 일대일 대응으로. 1번 연산은 덧셈, 2번 연산은 저장..

이렇게 이름 붙여준애들(덧셈, 저장..)을 어셈블리어라고 한다. 기계어와 같은 저급언어 친구다. ( 기계어: 00110 010110[각주:2]  어셈블리어: $0, $1, MOV )




| Compiler [컴파일러]


사람이 어떻게 0101110만 쓸 수 있겠는가. 더 쉬워졌다고 해서 $1, 10만 쓸 수 있겠는가. 우리는 고오급 언어를 발명했다. C언어. 하지만 멍청한 CPU는 우리의 고오급 언어를 알아들을 수 없었다. 우리는 고급 언어를 저급 언어로 바꾸어 컴퓨터에게 전달할 필요가 있었다. 이렇게 변환하는 과정을 컴파일(Compile)이라고 한다. 보통 고급언어를 저급언어로 바꾸는것을 의미하지만, 굳이 '고급→저급'일 필요는 없다. 이렇게 컴파일을 해 주는 도구를 컴파일러라고 한다.


CPU는 표준화되지 않았다고 말했다. 다시 말하면, CPU마다 명령 생김새가 다르다는 말이다. 컴파일은 컴퓨터가 알아듣게 만드는 과정이라고 했으니, 우리는 쉽게 CPU마다(혹은 OS마다) 각각 다른 맞춤형 컴파일이 필요하다는걸 알 수 있다.

* 자바는 JVM(자바 가상머신)이 있다. 자바코드는 이 가상머신 위에서 돌아가기 때문에 CPU에 상관없이 그냥 컴파일하면 된다. 하지만 JVM은 CPU에 따라(or OS) 다르다.

 



| Object File


개별적인 실행환경을 맞추려면 힘들다. 좀 공통된 부분을 뽑아 표준화시켜보자, 해서 만든게 Object File(목적파일, 중간파일)이다. 이 목적파일들을 모아모아 링크(link)시켜 실행파일을 만든다. (엥 이거 완전 객체지향 아니냐? 아니다[각주:3]. )


소스 파일을 컴파일하면 .obj파일이 만들어진다. 그리고 이 목적파일을 연결(link)하면 .exe인 실행파일이 만들어지는 것이다. 오브젝트 파일, 말이 중간파일이지 막상 까보면 생긴게 인코딩 잘못해서 깨진것처럼 생겼다.


자바에서도 비슷한게 있었다.

자바는 소스파일(*.java)를 컴파일(javac.exe)하면 바이트 코드 파일(*.class)가 만들어졌다. 그리고 이 클래스를 JVM에서 구동(java.exe)하면 비로소 프로그램이 실행됐었다.



오브젝트 파일 참고

http://egloos.zum.com/recipes/v/5010841

http://ith.kr/chair/cpp/cpp103.html




* *.dll 파일: 프로그램은 하드→램→CPU 순서로 얹어지며 실행된다. 그런데 용량상 프로그램 전체를 얹을 수가 없다. 따라서 램을 효율적으로 사용하기 위해 프로그램을 실행 할 때 필요한것만 쪼개서 사용하게 되는데, 이렇게 쪼갠것이 dll파일이다. (dll파일이 실행파일은 아니다)


* 환경변수: 보통 cmd창에서 실행은 그 폴더 내에서 터미널을 열었을 때만 가능하다. 즉, A폴더 안의 a.exe를 실행시키고 싶다면 A폴더 안에서 명령어로 a.exe를 실행시킬 수 있지만,  A폴더 밖에서는 실행시킬 수 없다는 말이다.

환경변수는 이러한 문제를 해결해 준다. a.exe를 A폴더 밖에서도 실행 가능하게 해 준다.

환경변수는 '컴퓨터-속성-고급 시스템 설정- 고급'에서 바꿀 수 있다.


* .bin: 바이너리 파일. 이진수로 구성된 파일이다.



-

  1. C는 메모리에 직접 접근이 가능해서. [본문으로]
  2. 전기 꺼짐:0 켜짐:1 [본문으로]
  3. 절차지향이랑 객체지향이랑 가장 큰 차이점은 클래스인데 c는 클래스가 아니다. 클래스는 상속이 가능해야 한다. [본문으로]

'Study > C' 카테고리의 다른 글

2.2 sizeof, 화면입출력, 상수, 리터럴  (0) 2018.07.16
2. Hello, World!  (0) 2016.12.20
0. Unix와 Linux  (0) 2016.12.20
0. GNU  (0) 2016.12.20
0. MingW  (0) 2016.12.20