본문 바로가기
728x90

TIL & WIL25

[TIL] 크래프톤 정글 5주차 CS:app 8(예외적인 제어 흐름) 8장 예외적인 제어흐름- 프로세서가 전원이 켜질 때부터 꺼질 때까지 프로그램 카운터는 다음 그림과 같이 연속된 값들을 가정한다. - 인스트럭션 I_k 에 대응되는 주소는 a_k 이고, a_k에서 a_k+1 로의 전환은 제어이동이라 부른다. - 이러한 제어이동의 배열은 제어흐름 또는 프로세서의 제어흐름이라고 부른다. - 가장 간단한 유형은 점진적인 순서로, 각각의 I_k와 I_k+1이 메모리에서 나란히 있는 경우고, 인접해 있지 않는 경우는 jump, call 리턴 같은 프로그램 인스트럭션에 의해 발생한다. - 현대의 시스템들은 제어흐름에 급격한 변화를 만드는 방법으로 여러 상황에 반응하는데 이러한 변화를 예외적인 제어흐름(exceaptional control flow(ECF))라고 한다. - ECF는 하.. 2024. 4. 26.
[TIL] 크래프톤 정글 5주차 - 자료구조(RB Tree) Red-Black Tree란? - 이진 탐색 트리(BST)의 한 종류 - 스스로 균형을 잡는(self-balanced) 트리 - BST의 worst case의 단점을 개선 - 모든 노드는 red 혹은 blackRed-Black Tree의 속성1. 모든 노드는 red 혹은 black 2. 루트 노드는 black 3. 모든 nil(leaf) 노드는 black nil 노드란?- 존재하지 않음을 의미하는 노드 - 자녀가 없을 때 자녀를 nil 노드로 표기(null이면 nil노드로 표기) - 값이 있는 노드와 동등하게 취급 - RB 트리에서 leaf 노드는 nil 노드  4. red의 자녀들은 black이다.(red가 연속적으로 존재할 수 없다.) 5. 임의의 .. 2024. 4. 20.
[TIL] 크래프톤 정글 5주차 CS:app 7(링커 Linker) 7장 linker - 링킹(linking)은 여러 개의 코드와 데이터를 모아서 연결하여 메모리에 로드될 수 있고 실행될 수 있는 한 개의 파일로 만드는 작업이다. - 링커는 소포트웨어 개발 시에 독립적인 컴파일을 가능하게 한다. 큰 규모의 응용프로그램을 한 개의 소스 파일로 구성하는 대신 별도로 수정할 수 있고, 컴파일할 수 있는 더 작은 모듈로 나누어 관리할 수 있다. 이 모듈 중 한 개를 변경할 때, 이 파일만을 간단히 재컴파일하고 이 파일을 다시 링크한다. - 이 단원에서는 리눅스와 표준 ELF-64 목적파일 형식(이후 ELF)을 사용하는 x86-64 시스템의 context에서 논의할 것이다. 7.1 컴파일러 드라이버 - 대부분의 컴파일 시스템은 언어 전처리기, 컴파일러, 어셈블러, 링커를 필요에 .. 2024. 4. 19.
[TIL] 크래프톤 정글 4주차 - 동적 메모리 할당(Dynamic Memory Allocation) 메모리 동적 할당이란? - 메모리 동적 할당은 프로그래밍에서 사용하는 변수나 배열은 컴파일 타임에 크기가 결정되는데, 동적 메모리 할당은 런타임 중에 메모리의 크기를 결정하고 할당하는 방식이다. - 예를 들어, 사용자로부터 입력을 받은 크기만큼의 배열을 생성하려는 경우, 동적 메모리 할당을 사용해야한다. - C언어에서는 malloc, calloc 등을 이용해서 동적 메모리 할당을 할 수 있고, realloc을 이용하여 재할당을 할 수 있다. 동적 할당을 사용하는 이유 - 동적 할당을 하면 프로그램의 유연성을 높이며, 데이터의 크기가 런타임에 결정될 때 유리하다. - 더 깊게 설명하려면 스택 메모리와 힙 메모리에 대해 설명해야한다. 1) 스택 메모리(stack memory) · 스택 메모리는 컴파일 타임에.. 2024. 4. 15.
[TIL] 크래프톤 정글 3주차 CS:app 6(배열의 할당과 접근) 3.8 배열의 할당과 접근 사실 이 단원은 C언어를 배우고 써본 경험이 있는 사람에게는 이해하기 어렵지 않다고 생각한다. 하지만 C언어보다 하위 레벨인 어셈블리어를 이용해서 어떤 식으로 작동하는지 살펴보는 것은 C언어 경험자에게도 좋은 경험이라고 생각한다. 3.8.1 기본 원리 자료형 T와 정수형 상수 N에 대해 T A[N]; 과 같이 선언했다고 생각해보자. 이 배열의 시작하는 위치를 xa 라고 하자. 이 배열 선언으로 인해 L * N 바이트의 연속적인 공간을 메모리에 할당하며, L(바이트 단위)은 자료형 T의 크기를 나타낸다. 또 A를 이 배열이 시작하는 위치를 가리키는 포인터로 사용할 수 있다. 이 값은 위의 xa와 같다. 배열의 i 번째 원소의 주소는 xa + L * i 이다. 예를 들어 정수형 배.. 2024. 4. 14.
[TIL] 크래프톤 정글 3주차 CS:app 5(Procedure) 3.7 Procedure란? - procedure란 특정 작업을 수행하는 명령어의 모음 또는 코드 블럭을 의미한다.(쉽게 말하면 함수) -잘 설계된 소프트웨어는 프로시저가 프로그램 상태에 무슨 영향을 주는지 명확한 인터페이스 정의를 알려주며 구체적인 구현은 감추는 방식으로 추상화 메커니즘으로 이용한다. -프로시저 P가 Q를 호출하고 Q가 실행된 후 다시 P로 리턴하는 과정은 다음 중 하나 이상의 메커니즘을 포함한다. 1) 제어권 전달(passing control) : PC(Program Counter)는 진입할 때 Q의 코드의 시작 주소로 설정되고, 리턴할 때는 P에서 Q를 호출하는 instruction 다음의 것으로 설정되어야 한다. 2) 데이터 전달(passing data) : P는 하나 이상의 매개.. 2024. 4. 14.
728x90