240812
1) C언어에서는(다른 언어나 OS에서는 어떨지 모르겠다) 1바이트(=8비트)로 구성된 한 칸 한 칸을 가리키는 주소 체계를 가지고 있는데, 이는 물리적인 메모리와 1대1 대응한다. 그 주소를 바탕으로 접근과 조작이 이루어진다.
생각해보면 디스크에서도 그러한 주소가 있어야 할 것이다. 접근을 해야 하니까. OS가 적절한 파일 관리 인터페이스를 제공해서 프로그램이 그 인터페이스로만 상호작용할 수 있다 하더라도, 그렇게 인터페이스로 wrapping된 안쪽에서는 실제적인 상호작용이 존재해야만 한다.
여기서부터 모르겠다. C언어로 디스크를 어떻게 관리 및 조작하는가?(물론 기계어나 어셈블리는 더더욱 모른다) 메모리 관리나 시스템 콜(이 단어도 처음 알았다)이 아닌 방식으로 디스크를 조작해야 하는데 도통 모르겠다. 이 부분은 운영체제를 자세히 들여다봐야 할 거 같기도 하고. 하여간 C언어로 디스크를 조작할 수 있다는 것이 놀라운 사실이다. 여기 관해서는 놀랄 일이 한가득일 것 같다.
240813
1) 디스크의 대상은 메모리 위로 올라와서 연산을 거치게 된다. 그러나 메모리 공간이 모자라는 순간이 온다. external sort는 메모리 공간이 모자랄 때 디스크 공간을 활용하는 방식의 정렬을 부르는 말이다. 예시로는 k-way merge algorithm이란 게 있는데, tournament tree(winner tree라고도 한단다)를 이용하여 정렬하려는 대상의 일부를 메모리 위에서 정렬하고, 그 정렬된 대상들을 바탕으로 다시 merge sort를 진행하는 방식이라고 한다.
보통 알고리즘 문제 해결에서는 모든 것이 메모리 위에서 진행된다. 시간과 메모리 제약이 있지만, 그보다 더 복잡한 메모리-디스크 제약 조건 위에서 발전된 알고리즘을 보자니 굉장히 재밌었다.
240814
1) 포인터 자료형의 명시적 캐스팅. void 포인터를 통해 일종의 오버로딩을 C언어에서도 구현할 수 있다는 건 대충 알고 있었다. 써본 적은 없고. 그런데 C언어에서 "상속"을 구현하기 위해 "부모 구조체" 포인터 타입으로 형변환을 거친 뒤 인자로 넣고, 함수 내부에서 구체적 타입에 대한 enum 등을 통해 원래 자료형을 "복원"해내는 과정을 보게 됐는데 정말 기오막측했다…
240815
뜬금없이 게임 개발과 기획에 관한 이야기를 나눴다. idle 게임은 기본적으로 몬스터는 지수적으로 성장하고 플레이어는 선형적으로 성장하는데, 플레이어의 성장에는 계단식 성장이 특정 주기에 따라 주어지며, 계단식 성장이 지수 성장을 따라잡는 데 필요한 주기는 점점 길어진다. 그러한 계단식 성장을 다방면으로 준비해서 계단식 성장 사이의 주기를 적은 것처럼 느끼게 하여 성장과 성취의 쾌감을 적절한 주기로 지치지 않게 제공하는 게 idle 게임의 기본이라는 게 내 주장이었다.
그러니까, 기본적으로는 통제와 성취다. '아 내가 XX를 해냈다!' 가챠는 그 감각을 인스턴트하게 준다. 사실 많은 서사 매체들이 이입을 통해 그를 간접적으로 구현한다고 생각한다. 긴장-해소/기대-충족의 사이클에 더 가까울 것 같긴 한데.
240816
아무 일도… 없었다…!
240817
아파서 잤다.
240818
포스팅의 초안은 짜뒀는데 정작 일요일에 마무리하는 걸 잊고 있었다. 사실 그냥 잊고 있던 거지… task를 관리할 필요를 느낀다. 옵시디언도 다시 써보고 싶은데. 아자아자 파이팅!
'blah > Amazing Facts on Week' 카테고리의 다른 글
240805 - 240811 금주의 놀라운 사실들 (0) | 2024.08.12 |
---|---|
240729 - 240804 금주의 놀라운 사실들 (0) | 2024.08.04 |