....
H님, S님, I님, T님과 함께 CS 코어를 했다.
3.4와 3.7을 진행했다.
아마 인스트럭션에서 어떠한 특정 데이터를 호출할때에,
데이터에 따른 다른 표기를 나타낸 것 같다.
외울 필요는 없어도 존재한다는 정도만 알면 될 것 같다.
-mov 클래스는 데이터 크기에 맞는 데이터를 옮기지만
movz, movs는 큰 목적지에 옮기는데,
아마 movl은 그 둘에 속하지 않지만
큰 데이터 크기에 도착하는 예외가 아닐까...?
-어떤 자주 쓰는 명령어라 movl로 따로 뺀 것 같다.
별개의 함수로 옮겨질 때는 지역 변수에서만 처리되었다가 사라지기때문에,
주소 자체를 넘겨줘야한다.
(S님이 C#기준에서의 (C#이 맞나) 얇은 복사, 깊은 복사에 대해 설명해주셨음.)
괄호가 없는건 그 레지스터를 가리킬 뿐이지만,
괄호가 있는건 그 레지스터에 있는 주소를... 가리키는 것 같다.
(int a는 괄호가 안 들어가고 지정되지만,
(int a= 10은 괄호가 들어가며 지정된다.)
아마 비트의 크기에 따라 나뉘어져있다...?였나
아무튼 이 레지스터가 용도에 따라 나뉘어진거고(보니까 6개의 인자까지 저장위치가 정해져있었다.)
callee, caller가 호출자, 피호출자 저장 그거고
그런거같다..
아니다. 레지스터에 저장하고도 자리가 모자랄 때 할당된다.
그리고 여기 예시 나온 경우마다 할당되는 것 같다.
-주소를 생성할 때도 할당된다는데, 그럼 거의 항상 할당되는게 아닌가?
...
해서 여기서 나왔던게
함수에서 쓸 때, 값을 가져올때 (int a...)
값까지 할당 된걸 가려면 그 주소를 가져와야하고,
그게 지역변수 자리에 저장되는게 아닐까(다른 함수에서도 써야하는게 아닐까)
해서
-그렇다면 그렇게 지역변수가 쌓이고, 리턴 주소가 쌓이고, Argument Area가 생기고, 그 지역변수를 가져와서 똑같이 저장한 값이 쌓이고........등등.
이후 3.7.5 부터는 이후에 하기로 했다...!
3.8이랑!
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차원 테이블을
아래서부터 채워서 조건식이 어떻게 성립하는지
설명해주셨다.
똑같은 2차원 배열을 만들되, 가짓수의 경우를 담으면 될 것...
아니면 최종값에서, 규칙에 따라 역추적하며 출력할 수도 있다.
비교하는 두개의 식을 a = ... b= ...를 아까 위의 두개를 각각 넣고,
그 a,b 중 큰 값을 반환하도록 하면 재귀를 설계하기 괜찮을 듯 하다.
매개변수의 갯수가 2개라 2차원배열로 나온 것.
매개변수의 갯수에 따라 배열도 다를 것이다.
한번 실제로 배열을 만든 후, 규칙을 확인하거나,
비교하는 조건식을 Vmax(...) 식으로 직접 쓰고 나서
코드로 구현한다면 구현하기 좀 수월할 것이다.
듣고보니
상향식의 재귀함수의 구조를 알게 되었다... 명강!
하향식은 재귀를 쓰지 않아도 되지만,
아주 초깃값은 사실 중간 과정의 해를 얻기 위함이지,
초기의 해는 필요한 값이 아니라서,
메모리의 차지가 크다...는 점이 단점이고.
상향식은 필요한 값만 찾아서 찾아볼 수는 있지만...
뭐였더라 항상 되는게 아니라고했나..? 모르겠군