CS

메모리에 대한 이해와 주의점

메모리

  • 프로그램에서 데이터를 저장할 수 있는 공간
  • 프로그램 실행 시 OS에서 자동으로 일정 영역을 할당
  • 코드 + 데이터 + 스택 + 힙 영역

스택 오버플로우와 힙 오버플로우의 차이

구분 스택 오버플로우 (Stack Overflow) 힙 오버플로우 (Heap Overflow)
메모리 특성 정적 할당, LIFO (Last In First Out) 구조 동적 할당, 자유로운 구조
발생 위치 스택 프레임 (함수 호출 깊이) 동적 할당된 메모리 블록 (Chunk)
가장 흔한 원인 무한 재귀 호출, 너무 큰 지역 배열 메모리 할당 크기보다 긴 데이터 입력
방향성 보통 높은 주소 → 낮은 주소로 자라다가 충돌 보통 낮은 주소 → 높은 주소로 자라며 덮어씀
위험성 즉각적인 프로그램 종료 (비교적 발견 쉬움) 데이터 오염, 잠재적 보안 취약점 (발견 어려움)
공격 대상 리턴 주소 (Return Address) 함수 포인터, 객체 데이터, 힙 메타데이터

프로그램이 종료되면 할당된 모든 메모리는 날라간다

이 상황이 위험한 상황인 경우:

구분 설명 해결책 (Defense)
현상 프로그램 종료 시 RAM 데이터 소멸 이것은 막을 수 없는 물리적 현상입니다.
위험 저장되지 않은 중요 데이터 손실 영속성(Persistence) 확보
대응 1 주기적인 자동 저장 (Auto Save) 파일이나 DB에 수시로 기록
대응 2 트랜잭션 관리 (Transaction) 작업이 완료되지 않으면 아예 없던 일로 처리(Rollback)
대응 3 로그 기록 (Logging) 메모리가 날아가도 ‘어떤 행동을 했는지’ 기록을 남겨 복구

데이터 무결성

메모리에 값을 읽고 쓰는 행위는 반드시 동시에 일어나선 안된다

  • 멀티 스레드 환경에서 반드시 고려해야 하는 요소
  • lock, unlock으로 데이터 무결성 보장 가능

파일, 데이터베이스, 레지스트리의 차이

구분 파일 (File) 데이터베이스 (DB) 레지스트리 (Registry)
주 목적 일반적인 데이터 저장, 문서, 미디어 대용량 데이터 처리, 복잡한 검색, 서비스용 Windows 시스템 및 프로그램 설정 저장
구조 비정형 (Text, Binary 등 자유) 정형화됨 (Table, Document 등) 계층형 (Key-Value 트리 구조)
검색 속도 느림 (전체를 다 뒤져야 할 수도 있음) 매우 빠름 (인덱싱 기술 사용) 빠름 (설정값 조회에 최적화)
접근 방식 파일 입출력 함수 (Open/Read/Write) 쿼리 언어 (SQL) Windows API, 레지스트리 편집기
위험성 파일 하나 깨지면 그 파일만 못 씀 시스템 전체 데이터 무결성이 중요 잘못 건드리면 OS 전체 고장

results matching ""

    No results matching ""