목록전체 글 (409)
이야기박스
10진수를 2진수로 변환하는 포스팅 입니다. ○ 일반 정수2로 나누며 나머지를 기록합니다.나눈 결과 값이 1이 되면 종료합니다. 예) 10진수 11을 2진수로 변환 2 | 11-------------------2 | 5 ... 1-------------------2 | 2 ... 1------------------- 1 ... 0 이걸 차례대로 읽으면1011(2) 가 됩니다! ○ 소수곱하기 2를 하며, 소수점 위로 올라가는 것을 제거합니다. 반복하며, 소수점이 완전히 제거 되면 종료합니다. 예) 10진수 0.375를 2진수로 변환 0.375 * 2 = 0.750 ... 00.750 * 2 = 1.500 ... 10.500 * 2 = 1.000 ... 1 위에서부터 차례대로 읽으면0.011(2) 가 됩니다..
재귀를 배우기 시작하면, 모두들 해보셨을 예제로 피보나치 수열이 있죠.대부분 수업시간에서는 그렇게 크지 않은 숫자를 예제로 돌렸을 것이라 생각합니다. 근데 숫자가 커지게 된다면, 재귀를 무지막지하게 해서 TLE (Time limited exceeded)가 생기겠죠? 그렇기 때문에 동적 계획법을 통하여 코딩을 합니다. 개요- 배열 or 리스트를 생성하여 이전 피보나치 값들을 저장합니다.- 이 데이터 구조를 이용하여 재귀의 숫자를 획기적으로 줄여봅니다. ==> 이러한 기법을 Memoization 기법이라 합니다. (DP의 핵심 기술) 코드 #include using namespace std; #define SIZE 1000 long long save[SIZE] = { 0, 1, 1, }; long long ..
Join 함수는 쓰레드의 종료를 기다려 주는 함수입니다. 비주얼 스튜디오 API 에서 제공되는 WaitForSingleObject이나 WaitForMultipleObjects 과 같은 역할을 합니다.
○ pid (process identifier): 각 프로세스의 고유 번호 ○ fork() : 자식 프로세스를 생성하는 함수입니다.--> 반환 값 : 실패시 (-1) , 부모 프로세스에게는 (자식 프로세스의 pid), 자식 프로세스에게는 (0) ○ 페이지 테이블 관점부모 프로세스로부터 자식 프로세스를 만든 경우,처음에는 같은 메모리를 사용 하다가, 한쪽에서 write 작업이 일어나면 이전 테이블을 copy합니다.
이전에 메모리 영역에 대한 포스팅을 했는데요 ㅎㅎ 이번에는 프로세스 내부의 스레드를 이 메모리 영역 관점으로 보았습니다. 짧은 포스팅이 될 것 같네요! 결론!! - 각 프로세스들은 독립적인 메모리 영역을 갖는다. - 특정 프로세스에 속한 스레드들은 Stack 영역을 제외한 나머지 영역을 공유한다.
이게 매번 헷갈려서 확실히 정리를 할 필요가 있겠네요. 프로세스가 차지하고 있는 메모리를 살펴보면크게 Code, Data, Heap, Stack의 영역으로 나누어져 있습니다.이들 각각을 segment라 불러요. - 메모리 맵 ○ 정적 세그먼트1. Code: 제일 아래 text가 코드 부분입니다.작성한 코드가 들어가는 부분입니다. 기계어도 포함되요. 이 부분은 "read only" 영역이라 쓰기 작업이 들어오면 "access violation"이 발생합니다.프로세스가 종료될 때까지, 계속 유지되는 영역입니다. 2. Data전역변수(global), 정적변수(static), 배열(array), 구조체(structure) 등이 저장됩니다.1) 초기화 된 데이터 : data에 저장2) 초기화 되지 않은 데이터 :..
안녕하세요. 오늘은 프로세스 생성과 임계구역 사용법을 다루어 볼려고 합니다. 저는 비주얼 스튜디오를 사용하고 있기 때문에, fork() 함수가 아닌 CreateThread() 함수를 이용하여 프로세스를 생성할 것입니다. * windows.h 헤더 내용을 다루고 있어요 공유 변수 cnt 가 어떻게 다루어지는지 살펴 보도록 하겠습니다. - 코드 #include #include using namespace std; #define MAX 100000 volatile int cnt; CRITICAL_SECTION cs; DWORD WINAPI ThreadFunc(LPVOID lpParam) { for (int i = 0; i < MAX; ++i) { ++cnt; } return 0; } DWORD WINAPI T..
Splay Tree 코드 게시글입니다. 지난번에 포스팅했던, AVL 트리 코드를 거의 그대로 가져다 썼습니다. ㅎㅎ 그래서 쓰지 않는 메서드들도 꽤 있네요 ㅎㅎ ㅜㅜ 정리가 좀 안된 감이 있지만, 코드 자체가 쉬우니 금방 이해하실 수 있을겁니다. 코드 - main.cpp #include "Splay.h" #include #include #define NUM 6 int main() { srand((unsigned int)time(nullptr)); cout rightc; while (!isExternal(tmp)) { tmp = tmp->leftc; } return tmp; } // 깊이를 반환 int Splay::depth(Node *now) { int ret = 0; while (!isRoot(now)..