세그멘테이션

    세그멘테이션 (Segmentation) 오류

    운영 체제(OS)에서 세그멘테이션 오류는 프로그램이 올바르지 않은 메모리 영역에 접근하려고 할 때 발생하는 예외다. 예외 발생 시 운영 체제는 프로세스를 종료시키고 종종 코어 덤프를 생성한다. C/C++에서는 메모리 관리를 개발자가 수동으로 해야 하는 특성을 가지고 있기 때문에 주로 C/C++ 코드에서 자주 발생한다 . 발생하는 상황들 1. 함수 포인터를 초기화하지 않고 호출 void (*func_ptr)(); // 초기화되지 않은 함수 포인터 func_ptr(); // 초기화되지 않은 함수 포인터 호출로 인한 세그멘테이션 위반 발생 2. 배열 범위를 넘어서는 인덱스 사용 int arr[10]; arr[100] = 42; // 범위를 벗어난 인덱스 사용 3. 동적 메모리 할당 후 해제한 메모리에 접근 i..

    세그멘테이션(Segmentation)이란? 세그멘테이션 vs 페이징

    세그멘테이션이란? 페이징은 프로세스를 물리적으로 일정한 크기로 나눠서 메모리에 할당하는 것을 의미한다. 반면, 세그멘테이션은 프로세스를 논리적 내용을 기반으로 나눠서 메모리에 배치하는 것을 의미한다. 세그멘테이션은 프로세스를 세그먼트(segment)의 집합으로 표현한다. 이때 세그먼트는 논리 단위로 아래와 같은 것들이 해당된다. main program procedure function method object stack local variable global variable etc... 프로세스를 code영역, data영역, stack영역 등으로 나누는 것 또한 세그멘테이션이라고 할 수 있다. 세그멘테이션 계산 세그멘테이션도 페이징과 비슷하게 세그먼트 테이블을 가지고 있다. 페이징과 비슷하게 논리주소가 ..