목록SW JUNGLE 9기/CSAPP (5)
seven05
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/byDfLC/btsJqFSX0Vg/B27v3WnUQ7TnehWes0n720/img.png)
(전과 마찬가지로 단원 전체를 볼수있으면 당연히 좋지만 시간이 모자라는 관계로 일단은 코치님이 강조하신 부분들만 볼수밖에없었다. 다음에 시간이 생기면 다시 추가로 공부해보자!) 프로세서는 실행하는 명령어에 대응되는 주소값을 PC에 가지고있는데 실행하는 명령어에 따라 PC의 값이 변해가는 흐름을 제어 흐름(Control Transfer)이라고 한다. 제어흐름의 양상은 크게 3종류인데메모리에 할당된 명령어를 순차적으로 처리 (대부분의 시간동안 이 제어 흐름을 따른다)프로그램 상태 변화에 반응하여 제어 흐름이 변하는 경우(jump, call, return 등의 명령어를 수행하는 경우)예외적인 제어 흐름(Exceptional Control Flow, ECF) (프로그램의 실행과 관련이 있거나 없거나) 시스템 변..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/ecORr4/btsJr5bIDQI/jlskn56RdRHlzZeFXM7j11/img.png)
(7단원 전체를 볼수있으면 당연히 좋지만 시간이 모자라는 관계로 일단은 코치님이 강조하신 부분들만 볼수밖에없었다.다음에 시간이 생기면 다시 추가로 공부해보자!) 링킹이란?: 링킹(Linking)이란 프로그램 코드 및 데이터의 조각들을 결합하여 메모리에 로드되어 실행될 수 있는 하나의 실행 파일을 만드는 과정링커(Linker)는 링킹을 수행하는 프로그램, 각 모듈의 독립적인 컴파일을 가능하게 함 링킹을 공부해야하는이유?큰 규모의 프로그램을 개발하면서 링킹과 관련된 에러를 많이 만나기때문프로그래밍 언어의 스코프규칙이 어떻게 구현되는지 이해(지역변수와 전역변수의 차이 static의 의미)공유 라이브러리를 활용할줄 알아야하기때문링킹과 관련된 많은 시스템 개념들을 이해하기위해링킹 종류컴파일 타임에 이뤄지는 정적..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/bQ33PW/btsJrDTT5l8/VTlFkpSFIw1KMngCfeUw4K/img.png)
프로시저: 함수를 어셈블리어에서 나타내는 말로 이해했다.스택은 단지 메모리의 한 부분일 뿐이지만 이 부분을 스택 자료구조처럼 다뤄서 스택이라고 부른다. 스택은 프로시저와 관련된 상태를 나타내기 위해 쓰이는데 왜그럴까? 생각해보면 함수가 호출되는 과정은 한국어로는 후입선출 영어로는 LIFO(Last-In-First-Out) 이기때문에 스택의 형태가 함수호출에 적합하다.왼쪽 그림에 보이는것처럼 스택은 높은 메모리 주소부터 아래로 증가한다. %rsp 레지스터는 스택의 가장 낮은 주소를 항상 저장하고있으며 스택에 원소가 추가될수로 %rsp가 감소한다. 근데 이부분에서 궁금한것이 생겼다. 무슨 궁금증이냐면 스택이 왜 높은 주소부터 할당될까? 였다. 그래서 찾아보았더니 프로세스 주소공간에서 동적으로 할당되는 힙과 ..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/pQb8K/btsJqaMiOPr/HpQUmarsW1vVWcdZVurpb0/img.png)
어셈블리어 부분을 공부하다가 이해하기 힘들었거나 중요하다고 생각됐던 부분들을 정리해 보려고한다 레지스터: 이름이 왜 rax, rbx, ... 하다가 갑자기 r8,r9,r10 일까? -> 원래 8개 쓰다가 16개가 되서 그럼 왜 32개로 늘리지않을까? -> 늘려도 10%의 퍼포먼스 향상밖에 없는데 레지스터 이름 더 표기하려면 비트하나더씀%rsp 만 스택포인터 레지스터로 특별한 역할이 남아있다.movq 명려어는 단순히 값을 복사함 단, 두개의 값이 모두 메모리 주소이면 안됨 (movq의 q는 quadword의 약자로 과거에서 발전하는 과정에서 붙혀짐) 앞에서 봤었지만 레지스터를 괄호로 감싸면 레지스터의 값을 메모리 주소로 인식하라는 뜻 (포인터 역참조)어셈블리어 연산자 중에 헷갈렸던 부분: 산술연산과 논리연..
출처: 1/sqrt(x)를 빠르게 구하는 알고리즘 _ Fast InvSqrt() : 네이버 블로그 (naver.com) 1/sqrt(x)를 빠르게 구하는 알고리즘 _ Fast InvSqrt()참고 : https://www.youtube.com/watch?v=p8u_k2LIZyo&list=LL&index=4 ht...blog.naver.com컴퓨터가 숫자를 어떻게 비트로 표현하는지 배우는 부분에서 부동소수점 부분을 배우게 되는데 IEEE754 표준을 공부하다가 왜 지수부에 bias를 더하는지 이유를 알고싶어서 검색를 하다가 컴퓨터가 수를 저장하는 원리를 사용하여 극한으로 계산을 최적화한 사례로 소개되어있길래 알게되었다. 바로 1/sqrt(x)를 구하는 연산인데 이게 필요한 이유는 벡터를 단위벡터로 만들 때..