컴파일 타임 링크

 - 니가 짠 코드 빌드할때 소스를 그대로 바꿔치기 한다

 - 분명 코딩할때는 다른 스코프에 있는데 똑같이 값이 바뀌네? 컴파일러가 똑같이 인식해서 코드를 박았다는 뜻

런타임 링크

 - 니가 짠 코드 빌드할때 파일이든 뭐든간에 가리켜서(포인터) 하여 그 파일의 내용을 바꾸면 런타임때 소스 내용이 바뀐다

 - 프로그램이 돌고 있을때 실행됨


이걸로 너는 컴파일때 링킹을 통해 소스가 어떻게 바뀔지 런타임때 어떻게 알게됬음



메모리 할당

 - 명령어만 파일에 박아놓고 해당 스코프(함수) 실행시에 메모리 할당함

정적 메모리 할당

 - 컴파일 타임때 변수 하나를 파일에 이미 박아버림

동적 메모리 할당

 - 메모리를 가리키는 포인터를 선언해서 런타임때 해당 메모리의 값만큼의 배열 크기를 만듬

스마트 포인터

 - 동적 메모리 할당하는 포인터를 컨트롤 하는 지역변수로 

   string이나 템플릿으로 된 컨테이너들 크기를 막 늘렸다 줄였다 하는데 동적 할당 컨트롤해서 늘리고 줄이고 함


복사

 - 할당시 해당 메모리 크기만큼 그대로 복사해서 똑같은 형태의 메모리가 2개가 됨

참조

 - 포인터로 가리키기만 해서 자료형만 동일하면 똑같이 동작함. 포인터 메모리만 쓰면 끝

이동

 - 기존의 해당 메모리의 주인인 포인터를 갈아끼워서 거의 무연산으로 데이터를 Swap함


캐시

 - 사실상 마지막에 쓴 변수일수록 빨리 가져옴

 - 존나 큰 변수를 쓸수록 빨리 치워야지 빨라지니까 사용자의 기준에 맞게 작게 잘라서 미리 만들어 놔야


비트 연산

 - 1byte는 on / off 를 00000000 8개 처리 가능하지만 우리가 char로 보내면 단 1개의 on /off만 처리 가능

 - int면 32개고 우리는 서로 합의를 해서 32개의 조합으로 더 간결한 메시지를 날릴 수 있다


이걸로 너는 메모리 관리 방법 다 배웠다 나머지 다 필요없어



스택, 트리 구조

 - 스코프{}, 템플릿<>, 재귀, 폴더 시스템 전부다 트리 구조임. 제일 안쪽, 즉, 제일 아랫단에서 끝나서 위쪽으로 빠져나가는 메모리 구조를 상상해라


위에것들까지 합치면 너는 자료구조, DB 다 배웠다



동적 프로그래밍

 - 메모리는 연산이고 하드디스크는 중간 결과물의 저장값임. 일지를 기록하면서 이전 과정을 두번 다시 거치지 않도록 함

   이는 프로그래밍의 가상 메모리 구조(메모리 + 하드디스크)를 활용하는 방식의 중요지점 중 하나이다


가상 메모리

 - 메모리를 덩어리째 관리하면 타공마냥 메모리 전체에 구멍이 송송 뚫리니까 

  일정 단위로 쪼개서 관리하는데 그 일정 단위를 프로세스별로 모아만든 테이블


프로세스

 - 가상 메모리 테이블에 적힌 메모리를 가지는 단위로 CPU를 할당받음. 다른 프로세스랑 격리됨

 - ID를 가지고 식별하며 등급을 매기고 그 등급만큼 대우를 함


물리 스레드

 - CPU내 연산을 진행하는 흐름들

 - ID를 가지고 식별하며 등급을 매기고 그 등급만큼 대우를 함


사용자 스레드

 - 물리 스레드에 연산 순서를 지정해주는 언어내 연산을 진행하는 흐름들

 - ID를 가지고 식별하며 등급을 매기고 그 등급만큼 대우를 함


타스크 루프

 - 스레드들에게 일감 지정하는 무한루프로서 모든 객체지향 프로그래밍 기반의 프로그램의 기반


네트워크

 - 마트료시카 마냥 여러겹으로 쌓인 파일에 겹마다 번호가 적힘. 이 번호를 각 수문장들이 확인하고 표준을 지켰다면 통과시킴

 - 통과된 파일은 네트워크 칩에 쌓이고 사용자는 이를 정해진 단위로 잘라가서 출력을 하든 예외처리를 하든 함


운영체제 다 배웠다 나머지 다 필요없음 ㅅㄱ



CS 끝