컴파일 타임 링크
- 니가 짠 코드 빌드할때 소스를 그대로 바꿔치기 한다
- 분명 코딩할때는 다른 스코프에 있는데 똑같이 값이 바뀌네? 컴파일러가 똑같이 인식해서 코드를 박았다는 뜻
런타임 링크
- 니가 짠 코드 빌드할때 파일이든 뭐든간에 가리켜서(포인터) 하여 그 파일의 내용을 바꾸면 런타임때 소스 내용이 바뀐다
- 프로그램이 돌고 있을때 실행됨
이걸로 너는 컴파일때 링킹을 통해 소스가 어떻게 바뀔지 런타임때 어떻게 알게됬음
메모리 할당
- 명령어만 파일에 박아놓고 해당 스코프(함수) 실행시에 메모리 할당함
정적 메모리 할당
- 컴파일 타임때 변수 하나를 파일에 이미 박아버림
동적 메모리 할당
- 메모리를 가리키는 포인터를 선언해서 런타임때 해당 메모리의 값만큼의 배열 크기를 만듬
스마트 포인터
- 동적 메모리 할당하는 포인터를 컨트롤 하는 지역변수로
string이나 템플릿으로 된 컨테이너들 크기를 막 늘렸다 줄였다 하는데 동적 할당 컨트롤해서 늘리고 줄이고 함
복사
- 할당시 해당 메모리 크기만큼 그대로 복사해서 똑같은 형태의 메모리가 2개가 됨
참조
- 포인터로 가리키기만 해서 자료형만 동일하면 똑같이 동작함. 포인터 메모리만 쓰면 끝
이동
- 기존의 해당 메모리의 주인인 포인터를 갈아끼워서 거의 무연산으로 데이터를 Swap함
캐시
- 사실상 마지막에 쓴 변수일수록 빨리 가져옴
- 존나 큰 변수를 쓸수록 빨리 치워야지 빨라지니까 사용자의 기준에 맞게 작게 잘라서 미리 만들어 놔야
비트 연산
- 1byte는 on / off 를 00000000 8개 처리 가능하지만 우리가 char로 보내면 단 1개의 on /off만 처리 가능
- int면 32개고 우리는 서로 합의를 해서 32개의 조합으로 더 간결한 메시지를 날릴 수 있다
이걸로 너는 메모리 관리 방법 다 배웠다 나머지 다 필요없어
스택, 트리 구조
- 스코프{}, 템플릿<>, 재귀, 폴더 시스템 전부다 트리 구조임. 제일 안쪽, 즉, 제일 아랫단에서 끝나서 위쪽으로 빠져나가는 메모리 구조를 상상해라
위에것들까지 합치면 너는 자료구조, DB 다 배웠다
동적 프로그래밍
- 메모리는 연산이고 하드디스크는 중간 결과물의 저장값임. 일지를 기록하면서 이전 과정을 두번 다시 거치지 않도록 함
이는 프로그래밍의 가상 메모리 구조(메모리 + 하드디스크)를 활용하는 방식의 중요지점 중 하나이다
가상 메모리
- 메모리를 덩어리째 관리하면 타공마냥 메모리 전체에 구멍이 송송 뚫리니까
일정 단위로 쪼개서 관리하는데 그 일정 단위를 프로세스별로 모아만든 테이블
프로세스
- 가상 메모리 테이블에 적힌 메모리를 가지는 단위로 CPU를 할당받음. 다른 프로세스랑 격리됨
- ID를 가지고 식별하며 등급을 매기고 그 등급만큼 대우를 함
물리 스레드
- CPU내 연산을 진행하는 흐름들
- ID를 가지고 식별하며 등급을 매기고 그 등급만큼 대우를 함
사용자 스레드
- 물리 스레드에 연산 순서를 지정해주는 언어내 연산을 진행하는 흐름들
- ID를 가지고 식별하며 등급을 매기고 그 등급만큼 대우를 함
타스크 루프
- 스레드들에게 일감 지정하는 무한루프로서 모든 객체지향 프로그래밍 기반의 프로그램의 기반
네트워크
- 마트료시카 마냥 여러겹으로 쌓인 파일에 겹마다 번호가 적힘. 이 번호를 각 수문장들이 확인하고 표준을 지켰다면 통과시킴
- 통과된 파일은 네트워크 칩에 쌓이고 사용자는 이를 정해진 단위로 잘라가서 출력을 하든 예외처리를 하든 함
운영체제 다 배웠다 나머지 다 필요없음 ㅅㄱ
CS 끝
ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ