동적 메모리 관리 기법

1. 동적 메모리 할당의 필요성 프로그램 작성 시 사전에 메모리 크기를 정확히 알 수 없는 경우가 많습니다. 이러한 상황에서 고정된 크기의 배열이나 스택 메모리는 한계를 가집니다. int val = 20; // 스택 영역에서 4바이트 공간 확보 char arr[10] = {0}; // 스택 영역에서 연속된 10바이트 공간 생성 위 예제처럼 정적인 메모리 할당은 다음과 같은 제약을 가지 ...

6월 24일 18:23에 게시됨

C언어 포인터의 고급 활용과 사용자 정의 데이터 타입 정리

1. 다중 포인터 (Multi-level Pointers) 포인터 변수의 주소를 저장하는 포인터를 다중 포인터라고 합니다. 주소를 타고 여러 번 접근하는 구조를 가집니다. int data = 100; int *p1 = &data; // 1단계 포인터 int **p2 = &p1; // 2단계 포인터 (이중 포인터) int ***p3 = &p2; // 3단계 포인터 (삼중 포인터) 2. 안전한 포 ...

6월 22일 02:47에 게시됨

C# 클래스의 정적 멤버 이해와 활용

C#에서 클래스는 필드, 속성, 메서드로 구성되며 일반적으로 객체를 생성한 후 해당 객체를 통해 멤버에 접근한다. 이러한 멤버들은 각각의 객체가 독립적으로 소유하는 인스턴스 멤버이다. 예를 들어 제품 정보를 담은 Product 클래스가 있다고 가정하자. 이 클래스에는 제품명을 저장하는 name 필드가 있다. 두 개의 제품 객체(xphone과 mphone)를 생성하고 각각 다른 ...

6월 20일 06:27에 게시됨

리눅스 커널 메모리 보호기제와 OOM K 이터 최적화 방법

시스템 운영 중 물리적 메모리 한계를 초과할 정도로 과도한 메모리 할당 요청이 발생하면, Linux 커널은 안정적인 상태 유지를 위해 OOM(Killer) 메커니즘을 작동시킵니다. 이는 시스템 전체가 다운되는 것을 방지하기 위해 자원을 가장 많이 점유하는 프로세스를 강제로 종료시키는 과정입니다. OOM 발생 원리와 메모리 오버 커밋 응용 프로그램은 필요한 물리 메모리 ...

6월 16일 17:59에 게시됨

C 언어 포인터와 배열 활용 실습

1. 포인터를 이용한 배열 값 탐색 배열 내 최댓값과 최솟값을 찾는 과정에서 포인터를 활용하면 함수 호출 시 여러 값을 동시에 반환하는 효과를 낼 수 있습니다. #include <stdio.h> void calculate_range(int arr[], int size, int *min_ptr, int *max_ptr) { *min_ptr = *max_ptr = arr[0]; for (int i = 1; i < size; ++i) { if (arr[i] &lt ...

6월 6일 18:54에 게시됨