[Week3] 번외 코어

안나경·2024년 1월 27일

크프정 일상

목록 보기
16/109

8시 CS 코어

....

H님, S님, I님, T님과 함께 CS 코어를 했다.
3.4와 3.7을 진행했다.

Q1. 식별자는 무엇인가? 필요한 걸까? (3.4.1)

아마 인스트럭션에서 어떠한 특정 데이터를 호출할때에,
데이터에 따른 다른 표기를 나타낸 것 같다.
외울 필요는 없어도 존재한다는 정도만 알면 될 것 같다.

Q2. movl은 예외로 상위 4바이트를 0으로 설정한다... 라는데 정확히 무슨 예외인지 모르겠다.(3.4.2)

-mov 클래스는 데이터 크기에 맞는 데이터를 옮기지만
movz, movs는 큰 목적지에 옮기는데,
아마 movl은 그 둘에 속하지 않지만
큰 데이터 크기에 도착하는 예외가 아닐까...?

-어떤 자주 쓰는 명령어라 movl로 따로 뺀 것 같다.

Q3. 함수에서 인자를 받을 때 *를 쓰는 이유가...(이 질문이 아니었던것 같은데.(3.4.3)

별개의 함수로 옮겨질 때는 지역 변수에서만 처리되었다가 사라지기때문에,
주소 자체를 넘겨줘야한다.

(S님이 C#기준에서의 (C#이 맞나) 얇은 복사, 깊은 복사에 대해 설명해주셨음.)

Q4. 어셈블리어에 (%rdi)... 등으로 괄호가 쌓인 건 무엇일까?

괄호가 없는건 그 레지스터를 가리킬 뿐이지만,
괄호가 있는건 그 레지스터에 있는 주소를... 가리키는 것 같다.

(int a는 괄호가 안 들어가고 지정되지만,
(int a= 10은 괄호가 들어가며 지정된다.)

Q5. 레지스터가 왜 구역이 나뉘어져있는걸까?

아마 비트의 크기에 따라 나뉘어져있다...?였나
아무튼 이 레지스터가 용도에 따라 나뉘어진거고(보니까 6개의 인자까지 저장위치가 정해져있었다.)
callee, caller가 호출자, 피호출자 저장 그거고
그런거같다..

3.7

Q1. 지역 변수라는 건 프로시저가 쓸 때마다 항상 스택에 할당 되는 건가?

아니다. 레지스터에 저장하고도 자리가 모자랄 때 할당된다.
그리고 여기 예시 나온 경우마다 할당되는 것 같다.

-주소를 생성할 때도 할당된다는데, 그럼 거의 항상 할당되는게 아닌가?

...
해서 여기서 나왔던게
함수에서 쓸 때, 값을 가져올때 (int a...)
값까지 할당 된걸 가려면 그 주소를 가져와야하고,
그게 지역변수 자리에 저장되는게 아닐까(다른 함수에서도 써야하는게 아닐까)

해서

-그렇다면 그렇게 지역변수가 쌓이고, 리턴 주소가 쌓이고, Argument Area가 생기고, 그 지역변수를 가져와서 똑같이 저장한 값이 쌓이고........등등.

이후 3.7.5 부터는 이후에 하기로 했다...!
3.8이랑!

9시 DP 코어

M님이 주체적으로 강의하시는 DP를 들었다.

정말... 설명을 잘 해주셨다.

10kg에 5개의 물건을 넣는데 가장 큰 가치를 얻는 문제를
Vmax(10, [ABCDE]}라고 하면,
Vmax(7, [ABCDE]} Vmax(5,[ABC]) 등으로 부분 문제를 나눌 수 있다...

로 시작하면서

조건식을

Vmax(10, [ABCDE])은
실제로 가짓수를 하나씩 넣어서
5가지로 구분하면... 경우의 수가 겹치니까

Vmax(10, [BCDE])
Vmax(7, [BCDE] + Va)
두개 중 큰 값을... 고르는 부분 문제로 나눠서

그런 식으로 작은 부분문제로 나누면 된다!
라는게... 넣는다뺀다 라는 그걸 딱! 이해하기 좋았다.

그렇게 전체 2차원 테이블을
아래서부터 채워서 조건식이 어떻게 성립하는지
설명해주셨다.

Q1. 비교했는데 같은 값이라서 그냥 아무값이나 가져왔지만, 물건의 가짓수가 다른 걸 구분하고 싶은 경우는 어떻게 하는가?

똑같은 2차원 배열을 만들되, 가짓수의 경우를 담으면 될 것...
아니면 최종값에서, 규칙에 따라 역추적하며 출력할 수도 있다.

Q2. 상향식으로 재귀를 구현할 때는 어떻게 하는게 좋은가?

비교하는 두개의 식을 a = ... b= ...를 아까 위의 두개를 각각 넣고,
그 a,b 중 큰 값을 반환하도록 하면 재귀를 설계하기 괜찮을 듯 하다.

Q3. DP테이블은 모두 2차원인가?

매개변수의 갯수가 2개라 2차원배열로 나온 것.
매개변수의 갯수에 따라 배열도 다를 것이다.

Q4. 작은 문제에서 점화식을 세울 때는 어떻게 하는 게 좋은가? 점화식이 맞다고 확신할 수 있는 순간이 있는가?

한번 실제로 배열을 만든 후, 규칙을 확인하거나,
비교하는 조건식을 Vmax(...) 식으로 직접 쓰고 나서
코드로 구현한다면 구현하기 좀 수월할 것이다.

듣고보니
상향식의 재귀함수의 구조를 알게 되었다... 명강!

하향식은 재귀를 쓰지 않아도 되지만,
아주 초깃값은 사실 중간 과정의 해를 얻기 위함이지,
초기의 해는 필요한 값이 아니라서,
메모리의 차지가 크다...는 점이 단점이고.

상향식은 필요한 값만 찾아서 찾아볼 수는 있지만...
뭐였더라 항상 되는게 아니라고했나..? 모르겠군

profile
개발자 희망...

0개의 댓글