ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 메모리 구조(Memory Structure)란?
    Computer Science/OS 2024. 4. 5. 11:21
    반응형

     메모리 구조는 프로그램이 실행되면서 사용하는 메모리의 구성을 설명합니다. 이 구조는 일반적으로 코드 영역, 데이터 영역, 힙 영역, 스택 영역으로 나누어집니다. 각 영역은 특정 유형의 정보를 저장하며, 프로그램의 성능과 안정성에 직접적인 영향을 미칩니다.

     

    1. 코드(Code) 영역

    • 코드 영역은 프로그램이 실행되기 위해 CPU가 직접 읽어서 실행할 수 있는 기계어 코드가 저장되는 메모리 영역입니다. 이 영역에는 프로그램의 모든 함수와 명령어가 포함되어 있으며, 프로그램 실행 동안 변경되지 않습니다.
    • 코드 영역은 읽기 전용이므로, 프로그램 실행 중에 이 영역의 내용을 변경하려고 시도하면 실행 시간 오류가 발생할 수 있습니다. 보안상의 이유로도 코드 영역은 보호되며, 코드 주입과 같은 공격을 방지하는 데 중요한 역할을 합니다.

    2. 데이터(Data) 영역

    • 데이터 영역은 프로그램의 전역 변수와 정적 변수(static variable)가 저장되는 곳입니다. 이 변수들은 프로그램의 실행 시작부터 종료까지 계속 유지됩니다.
    • 데이터 영역의 크기는 컴파일 시에 결정되므로, 프로그램이 요구하는 메모리 양을 정확히 예측하고 최적화하는 것이 중요합니다. 또한 전역 변수의 과도한 사용은 프로그램의 추적과 디버깅을 어렵게 만들 수 있으므로 주의해야 합니다.

    3. 힙(Heap) 영역

    • 힙 영역은 동적 메모리 할당에 사용되며, 프로그램 실행 중에 프로그래머의 요청에 의해 메모리가 할당되고 해제됩니다. 예를 들어, C에서 malloc, C++에서 new 연산자, Java에서 new 키워드 등을 통해 메모리를 동적으로 할당받을 때 사용하는 영역입니다.
    • 프로그램이 동적으로 메모리를 요청할 때 (예: C언어의 malloc, C++의 new, Java의 객체 생성), 할당된 메모리 블록은 힙 영역에 위치합니다. 힙 영역은 높은 주소 방향으로 성장하는 대신, 데이터 영역 바로 위에서 시작하여 필요에 따라 메모리가 할당되면서 높은 주소 쪽으로 확장됩니다.
    • 동적 메모리 관리는 프로그래머의 책임이므로, 할당된 메모리를 적절히 해제하지 않으면 메모리 누수가 발생할 수 있습니다. 메모리 누수는 프로그램의 성능 저하 및 안정성 문제를 일으킬 수 있으므로, 동적 할당된 메모리는 반드시 필요하지 않게 되었을 때 해제해야 합니다.

    4. 스택(Stack) 영역

    • 스택 영역은 함수의 호출과 그 함수 내에서 선언된 지역 변수를 저장하는 곳입니다. 함수가 호출될 때마다 해당 함수의 정보를 담고 있는 스택 프레임이 스택에 추가됩니다. 이는 메모리 상에서 높은 주소에서 낮은 주소로 할당됩니다. 함수가 반환되면 스택 프레임이 스택에서 제거됩니다. 스택 영역은 후입선출(LIFO, Last In First Out) 방식으로 관리되며, 자동으로 할당 및 해제되어 프로그래머가 직접 관리할 필요가 없습니다.
    • 스택은 제한된 크기를 가지고 있으므로, 지역 변수의 과도한 사용이나 깊은 재귀 호출은 스택 오버플로를 발생시킬 수 있습니다. 스택 오버플로는 프로그램의 비정상적인 종료를 일으키므로, 재귀 호출의 깊이에 주의하고 지역 변수의 사용을 최적화해야 합니다.

    메모리 영역의 배치

     메모리 주소 공간은 크게 코드 영역, 데이터 영역, 힙 영역, 스택 영역으로 나뉩니다. 이 영역들은 프로그램 실행 시 메모리 상에서 특정 주소 범위를 차지합니다. 높은 주소에서 낮은 주소로 할당되는 구조에서는 대체로 다음과 같은 배치를 따릅니다:

    • 코드 영역데이터 영역은 메모리의 하단에 위치하며, 프로그램 로드 시 그 크기가 결정됩니다. 이들은 주소 공간의 낮은 주소 쪽에 배치됩니다.
    • 힙 영역은 데이터 영역 바로 위에서 시작하여, 필요에 따라 동적으로 메모리가 할당되면서 높은 주소 쪽으로 확장됩니다.
    • 스택 영역은 메모리의 상단, 즉 높은 주소에서 시작하여 함수 호출과 같은 이벤트에 따라 낮은 주소 쪽으로 확장됩니다. 즉, 스택 영역은 메모리의 높은 주소에서 시작하여 낮은 주소 방향으로 성장합니다.

     

    반응형
Designed by Tistory.