분류 전체보기
[실4] 28278 - 스택 2
#include #include #include using namespace std; stack s; string res; void Push(int n) { s.push(n); } void Pop() { if (s.empty()) res += to_string(-1) + '\n'; else { res += to_string(s.top()) + '\n'; s.pop(); } } void Size() { res += to_string(s.size()) + '\n'; } void Empty() { res += to_string(s.empty()) + '\n'; } void Top() { res += to_string(s.empty() ? -1 : s.top()) + '\n'; } int main() { ios..
[실5] 2563 - 색종이
#include #include #include using namespace std; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int arr[100][100]{ 0 }; int n; cin >> n; for (size_t i = 0; i > n1 >> n2; for (size_t j = n1; j < n1 + 10; j++) { for (size_t k = n2; k < n2 + 10; k++) arr[j][k] = 1; } } int sum = 0; for (size_t i = 0; i < 100; i++) { for (size_t j = 0; j < 1..
[실4] 10845 - 큐
#include #include #include using namespace std; queue q; string res; void Push(int x) { q.push(x); } void Pop() { if (q.empty()) res += to_string(-1) + '\n'; else { res += to_string(q.front()) + '\n'; q.pop(); } } void Size() { res += to_string(q.size()) + '\n'; } void Empty() { res += to_string(q.empty() ? 1 : 0) + '\n'; } void Front() { res += to_string(q.empty() ? -1 : q.front()) + '\n'; } vo..
[실4] 10816 - 숫자 카드 2
#include #include #include using namespace std; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int n; cin >> n; map data; for (int i = 0; i > val; data[val]++; } string s; int m; cin >> m; for (int i = 0; i > val; s += to_string(data[val]); if (i < m - 1) s += ' '; } cout
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcu2dSc%2FbtssikxneHC%2FafGSHMHBnz2FrLSVKDvnKK%2Fimg.png)
[Unreal] 언리얼 빌드 시스템 + Target.cs
Unreal Build System (언리얼 빌드 시스템)은 언리얼 엔진 4 (UE4) 빌드 프로세스를 자동화시키는 툴 모음이다. 일반적인 수준에서 UnrealBuildTool 과 UnrealHeaderTool 은 언리얼 빌드 시스템을 지원한다. UnrealBuildTool UnrealBuildTool (UBT)는 다양한 빌드 구성으로 UE4 소스 코드를 빌드하는 프로세스를 관리해 주는 커스텀 툴이다. BuildConfiguration.cs 파일에서 다양한 사용자 환경설정 가능 빌드 옵션을 살펴볼 수 있다. UnrealHeaderTool UnrealHeaderTool (UHT) 는 UObject 시스템을 지원하는 커스텀 파싱 및 코드 생성 툴이다. 코드 컴파일은 두 단계로 이루어진다: UHT 를 실행한다..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcgUcMK%2Fbtssc7smMKm%2FdLmDhVXhvMKbIkxRNMLkK0%2Fimg.png)
[C] 정적변수, 지역변수, 전역변수 비교 (static, local, global)
☑️ 지역변수(local variable, 자동변수)는 중괄호 내부, 함수의 매개변수(Parameter)에서 사용되는 변수를 의미한다. 지역변수의 지역은 함수의 내부, 중괄호 내부를 의미한다. 따라서 함수 안에서만 접근 가능하며, 함수를 벗어나면 사라진다 (= 변수의 메모리 공간이 소멸된다). 지역변수는 초기화하지 않으면 컴파일 에러가 나거나 쓰레기값이 저장된다. 지역변수(local variable)는 자동변수(auto variable)와 같다. 자동변수는 흔히 블록(중괄호) 안에서 사용하는 변수로서, 변수가 생성된 뒤에 자동으로 사라진다고 하여 자동변수라고 부른다. 매우 흔히 사용하기 때문에 auto 키워드를 생략하고 사용한다. ☑️ 전역 변수(global variable)는 지역변수와 반대로 중괄호 ..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbw0pK9%2FbtssgpFFx6H%2FP9eyz2bU0aVg10BPoRbzwK%2Fimg.png)
메모리 (RAM) 구조
RAM과 ROM RAM은 자유롭게 읽고 쓸 수 있는 기억장치로, RWM(Read Write Memory)라고 부르기도 한다. 또한 RAM에는 현재 사용 중인 프로그램이나 데이터가 저장되어 있다. 시스템의 전원이 꺼지면 기억된 내용이 모두 사라지는 휘발성 메모리의 특징을 가진다. 일반적으로 주기억장치 또는 메모리라고 불린다. ROM은 기억된 내용을 읽을 수만 있는 기억장치로서 일반적으로 쓰기가 불가능하다. 또한 시스템의 전원이 꺼져도 기억된 내용이 지워지지 않는 비휘발성 메모리다. 실제로 ROM은 주기억장치로 사용되기보단 주로 변경 가능성이 없는 시스템 소프트웨어를 기억시키는데 이용된다. (ex. 기본 입출력 시스템, 자가 진단 시스템) 프로그램 실행 순서 프로그램이 실행되는 과정을 도식화하면 다음과 같다..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwlH5O%2FbtssbzNXHN0%2F5VGTJwhlAgFDkVvVwVNbRk%2Fimg.png)
Virtual Memory - 가상 메모리 ( 필요한 이유 )
간단하게 말해서 프로세스의 논리 메모리와 물리 메모리를 분리하기 위해 생긴 개념이다. 왜 분리를 해야 하냐면, 물리 메모리의 한계를 극복하기 위해서이다. 무슨 말이냐면 여러 프로그램을 돌리면 메모리 부족의 문제가 생긴다. 이는 메모리 침범의 문제로 이어지기 때문에 이를 해결하고자 한 방법이다. 이런 이유 때문에 가상 메모리와 물리 메모리를 분리한다는 의미다. 논리 메모리가 가상 메모리다. 왜 가상 주소가 필요한지 예를 들어보자, 3개의 프로그램을 일정 시간에 따라 반복적(time에 따라)으로 돌리고 메인 메모리의 크기는 64KB라고 가정해보자. 그러면 먼저 taks1 (32KB), task2(16KB), task3(48KB)의 정보는 Hard disk에 다 들어있을 것이다. 그러다가 task1이 실행되면..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLVixO%2Fbtsr5eR97ci%2Fd18mTIXz8hTw8Rjikmn8h0%2Fimg.png)
Memory Allocation (논리 메모리, 물리 메모리, Dynamic Loading, Paging이 나온 이유 )
memory를 나눌 때 어떻게 눌지 정해야 한다. 모든 프로세스는 메모리에 올라와서 실행되는데 각각의 프로세스는 자신만의 할당 메모리가 있다. 이때 하나의 프로세스가 다른 프로세스 메모리에 침범하면 문제가 생긴다. 이런 이유 때문에 메모리의 구분이 필수적이다. 예방하는 방법으로 가장 단순하게는 시작 주소와 끝 주소를 지정하는 것이다. base 주소로부터 limit 주소를 하나의 프로세스에게 할당한다. (+아래서 보이지만, 운영체제 또한 메모리 상에 존재한다.) 어떤 프로세스를 할당할 때, base 주소보다 크고 base + limit 주소보다 작은 공간이 비어 있다면 할당하는 순서를 가질 수 있다. 메모리 주소 메모리에는 Logical address와 Physical address가 존재한다. 이 차이를..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FchzqCj%2Fbtsr62wIpZR%2FB1MsGv5nCGh1FwmHym0Wg1%2Fimg.png)
Swapping 스와핑 ( page in, page out )
여러 프로그램을 메모리상에서 돌리다 보면 메모리가 부족할 수밖에 없다. 이런 메모리 부족을 해결하기 위해서 나온 방법이 Swapping이다. 더 많은 프로세스가 메모리에 존재할 수 있도록 하는 것이다. swapping을 사용하면 프로세스를 다시 실행할 때 처음부터 메모리에 올리는 것이 아니라 더 빨리 할 수 있기 때문이다. Swapped은 backing store를 만들어서 프로세스 단위로 swap in, swap out을 동작한다. ( backing store는 임시저장소로 하드디스크나 NVM처럼 여러 하드웨어가 될 수 있다. 즉 Secondary Storage다.) 프로그램이 실행되면 Bakcing store에 있는 필요한 page 정보를 메모리에 올린다. 이렇게 프로세스 단위로 왔다 갔다 하는 걸,..