WN_인생기록

Harvard CS50 (2023) – Full Computer Science University Course-2(Arrays) 본문

CS/이론

Harvard CS50 (2023) – Full Computer Science University Course-2(Arrays)

WhNi 2024. 4. 16. 00:30

컴파일 과정에 대해서 설명해줬다. 

 

컴파일에는 

 

전처리기

컴파일

어셈블리

링커

라는 과정이 있다. 

 

전처리기의 경우에는 #include 라는 키워드를 통해서, 특정 파일에 있는 함수들의 기능을 미리 알려주는 기능을 한다. 이를 통해 매크로 혹은 함수들을 main 함수에서 인식할 수 있도록 하는 과정이다.

 

컴파일은 이제 소스코드에 있는 언어들을 어셈블리어로 변환시킨다. 

 

어셈블리는 어셈블리어로 변환된 코드들을 기계어인(바이너리 코드)로 변환시킨다. 

 

링커는 이제 이런 모든 코드들을 실행가능한 파일들로 만들어내는 과정을 말한다. 현재까지 기계어로 변한된 모든 코드들을 링커를 통해 묶여서 실행가능한 파일이 출력된다.

 

디컴파일이라는 개념도 있는데, 너무 어렵고 하기도 어렵기 때문에 잘 관심을 안가진다고 한다. 

 

 

배열-> 메모리에 특정 숫자 만큼 용량을 할당해달라고 하는 기능

[] 는 index 칸이며, 배열은 순서대로 메모리에 할당받는다. 그래서 index로 탐색이 가능하다

배열이 이런식으로 메모리에 저장되어있는지 가시적으로 보여주는 장면(int는 4바이트)

LeetCode 풀면서도 느낀건데, 미리 배열의 공간을 예상하고 만들어놓는게 push_back이라던가 emplace_back 같은 기능보다 시간복잡도 적으로 빠르다. 그래서 대입만 하면 되는게 가장 빠르기 때문에, 미리 공간을 마련하는게 더 좋다. 

 

char 의 경우는 1바이트라 한칸정도 차지하는데

 

string의 경우는 " "로 정의되고, char의 총 크기만큼 메모리가 할당된다. 추가적으로 마지막에 문자열이 끝나는 공간을 표시하기 위해서 \0 으로 표현된다. 그래서 string s = "HI!" 라고 한다면 HI!\0 이렇게 바이트가 한개 더 늘어나게 된다.

string s의 크기가 s.size()-1 을 해야 원하는 만큼의 사이즈를 얻게되는 경우가 있다는 말이다. 

 

 

문자열에 특정한 숫자를 더함으로써 새로운 암호나 의미가 만들어진 것들을 암호화 라고 하는데, 배열이나 for문 으로 이걸 구현할 수 있다. 

 

'CS > 이론' 카테고리의 다른 글

Harvard CS50 (2023) – Full Computer Science University Course-1 (C)  (0) 2024.04.11
IP 주소  (0) 2024.04.03
네트워크 기초 이론 (TCP/IP)  (1) 2024.04.03
네트워크 기초  (0) 2024.03.29