메모리의 종류와 할당 방식
- 데이터 영역(전역변수, static 변수)
- 프로그램 실행 시 로딩
- 힙(Heap) 영역(프로그래머 할당)
- 런타임에 크기 결정
- 스택(Stack) 영역(지역변수, 매개변수)
- 컴파일 타임에 크기 결정
- 함수 블록을 나가면 os에서 자동으로 해제시킴
메모리가 중요한 이유
- 메모리는 무한하지 않다. 즉 관리가 필요하다
- 사용자에 의한 관리가 필요함
- 프로그램이 종료되면, 할당된 모든 메모리가 날라감(정확히는 OS에 반환)
- 서비스 중인 유저의 데이터가 날아가게 되므로 데이터의 복구가 어려움
- 메모리에 값을 읽고 쓰는 행위는 반드시 동시에 일어나선 안된다(데이터 무결성)
메모리의 저장 매체
- 파일 : 메모리의 데이터를 프로그램에서 직접 하드 디스크에 기록
- 데이터베이스 : 메모리의 데이터를 DBMS등의 관리 시스템을 통해 기록
- 레지스트리 : 운영체제(OS)의 설정 및 정보가 저장되는 데이터베이스
데이터 무결성
- 프로그램에서 동시에 한 메모리를 쓸 경우 데이터가 깨지는 현상
- 순차적인 프로그램에서는 데이터가 깨질 수 없음
- 병렬적으로 데이터에 접근하는 멀티스레드 환경에서 반드시 고려해야 하는 요소
- LOCK / UNLOCK 키워드로 관리 가능(세마포어, 뮤텍스 등)
- 메모리 사용 시 잠그고 사용이 완료되면 잠금을 품
결론
- 프로그래머라면 반드시 메모리에 대한 이해가 필요함
- 메모리는 크게 데이터 영역, 힙, 스택 영역이 있다
- 메모리는 영구적이지 않으니 저장 매체에 기록해야 다시 꺼내 쓸 수 있다
- 데이터 무결성에 대해 항상 주의하자
'TIL > CS' 카테고리의 다른 글
[디자인 패턴] 프록시(Proxy) 패턴 (0) | 2024.07.09 |
---|---|
[디자인패턴] 팩토리 패턴 (0) | 2024.05.17 |
[디자인패턴] 싱글톤 패턴 (0) | 2024.05.16 |
브라우저 렌더링 과정 (0) | 2024.02.03 |