본문 바로가기

전체 글21

c# - 박싱(boxing)과 언박싱(unboxing) 메모리 상 데이터 값이 어떻게 저장되는 지에 따라 두가지 Type으로 나뉜다. Reference Type 데이터에 대한 참조를 저장해 놓은 형식이다. 참조를 저장하기 때문에 여러 변수가 같은 데이터(개체)를 참조할 수 있다. 즉, 하나의 수정이 여러 변수에 영향을 미칠 수 있다. Ex) class, interface, object, string, ... Value Type 실제 데이터 값을 저장하는 형식이다. 데이터의 자체 사본이 들어 있기에 하나의 수정이 다른 변수들에게 영향을 미치지 않는다. Ex) struct, bool, int, ... Boxing과 Unboxing .net에서 object는 모든 형식에 대한 부모로 동작하고 있다. (즉, 모든 클래스들은 object를 상속받고 있다.) Boxin.. 2024. 2. 26.
c# - 가비지 컬렉션 (Garbage Collection, GC) Garbage Collection이란? 스택 메모리는 함수가 실행되는 순간부터 종료될 때까지 얼만큼 공간을 사용하는지 계속 추적된다. 스택 영역은 알아서 줄어들고 늘어나기 때문에 따로 신경 쓸 건 없다. 하지만 힙 영역의 경우 메모리를 할당하고 어떤 행동도 하지 않으면 계속 메모리에 올라온 상태로 유지가 된다. C와 C++의 경우 프로그래머가 메모리를 직접 코드 상으로 관리해주어야 했는데, C#은 CLR이 자동적으로 메모리 관리를 해준다. garbage collection은 이러한 자동 메모리 관리의 중심이 되는 기능이다. garbage collector는 garbage collection을 담당하는 역할을 하고 있다. Garbage(가비지) reference type 변수들을 살펴보면 스택 메모리에 주.. 2024. 2. 26.
c# - 메모리 관리 (stack, heap) 프로그램을 실행하기 위해서는 프로그램이 메모리에 로드되고 프로그램에서 사용하는 변수들을 저장할 공간도 필요하다. 따라서, 운영체제는 프로그램 실행을 위해 프로그램에게 메모리를 할당해준다. 이 메모리 공간은 크게 데이터 영역, 코드 영역, stack 영역, heap 영역으로 나뉜다. 여기서, 코드와 데이터 영역의 경우 정적 할당 영역으로 컴파일 단계에서 메모리가 미리 할당되어 공간이 실행 중 변하지 않는다. 반면, 힙 영역과 스택 영역은 동적 할당 영역으로 프로그램 실행 중 공간이 계속해서 변한다는 특징을 가지고 있다. 따라서, 프로그램이 실행되면서 메모리가 어떻게 변화하는지 이해하기 위해서는 stack과 heap 영역의 동작에 대해 살펴볼 필요가 있다. Stack 메모리 메모리 관리 방식 (LIFO) s.. 2024. 2. 26.
c# - 조건문, 반복문, 함수 조건문 조건문의 기본 형태는 다음과 같다. if - else if - else if (조건1) { // 조건1 에 해당될 시 실행할 내용 } else if (조건2) { // 조건2에 해당될 시 실행할 내용 } else if ... // 원하는 조건만큼 else if 구문 작성 else { // 모든 경우에 해당 안되는 경우 실행할 내용 } ❓ if문 여러개 사용 VS if - else if - else 사용 if문을 여러개 쓴 경우 특정 조건이 만족되었을 때 뒤를 보고 싶지 않아도 다 확인하는데 반해 else if로 분기를 나누게 되면 특정 케이스의 조건이 만족되면 뒤의 다른 케이스들은 보지 않는다는 차이가 있다. int choice = 0; // 0: 가위, 1: 바위, 2: 보 // if문만 사용한.. 2024. 2. 24.
운영체제 - 페이지 교체와 프레임 할당 페이징을 통해 물리 메모리보다 큰 프로세스를 실행할 수 있었다. 하지만 그럼에도 물리 메모리의 크기는 한정되어 있다. 물리 메모리의 크기가 한정되어 있으므로 운영체제는 기존에 적재된 불필요한 페이지를 선별해 보조기억장치로 내보내고 프로세스들에게 적절한 수의 프레임을 할당해야 한다. 요구 페이징 (Demand Paging) 처음부터 모든 페이지를 적재하지 않고 필요한 페이지만을 메모리에 적재하는 기법이다. 즉, 요구되는 페이지만 적재하는 기법이다. 1) cpu가 특정 페이지에 접근하는 명령어를 실행한다. 2) 해당 페이지가 현재 메모리에 있을 경우 (유효 비트 = 1) cpu는 페이지가 적재된 프레임에 접근한다. 3) 해당 페이지가 현재 메모리에 없을 경우 (유효 비트 = 0) 페이지 폴트가 발생한다. 4.. 2024. 2. 20.
운영체제 - 페이징 가상 메모리 실행하고자 하는 프로그램을 일부만 적재해서 실제 물리 메모리보다 더 큰 프로세스를 실행할 수 있는 기술이다. 프로세스를 실행할 때 실행에 필요한 일부만 메모리에 로드하고 나머지는 디스크에 둔다. 이를 통해 프로세스 전체가 물리적 메모리에 있는 것처럼 수행되는, 즉 물리적 메모리가 훨씬 많이 있는 것처럼 보이게 된다. 결과적으로 메모리에 작은 양의 주소 공간만 있으면 충분히 프로세스를 수행할 수 있고, 더 많은 프로그램을 동시에 실행할 수 있게 된다. 가상 메모리의 핵심은 각각의 프로세스에게 메모리 공간이 독립적으로 부여된다는 것이다. 부여 받은 메모리 영역은 해당 프로세스만이 접근할 수 있도록 보호된다. 즉, 메모리 영역이 프로세스에게 독립적으로 부여되므로 타 프로세스가 해당 메모리 영역을 .. 2024. 2. 20.