Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- programmers
- BASIC
- Algospot
- web
- C언어
- server
- graph
- C
- BOJ
- String
- greedy
- 따라하면서 배우는 C언어
- Math
- 인프런
- sorting
- 생활코딩
- udemy
- 백준
- Python
- BFS
- php
- Algorithm
- 따배씨
- dfs
- 따라하며 배우는 C언어
- JavaScript
- 종만북
- Cleancode
- DP
- 정수론
Archives
- Today
- Total
몽상실현개발주의
[따배씨] 12.1 메모리 레이아웃 훑어보기 본문
따배씨 - 따라하며 배우는 C언어
12강 Storage Classes, Linkage and Memory Management
12.1 메모리 레이아웃 훑어보기
- 프로그램 코드는 변형이 되면 안되기 때문에 TEXT Segment 에 읽기 전용으로 저장됨
- 프로그램이 실행되면서 코드도 프로그램이 종료 될 때 까지 메모리 계속 존재
- 전역변수로 메모리를 선언하는것이 가장 편하지만, 프로그램이 끝날 때 까지 메모리가 할당 되어 있는것은 비 효율적임
- 블럭 안에서 선언되는 메모리는 stack 에 할당, 그 블럭이 실행되는 동안에만 메모리에 할당되고 블럭의 실행이 종료되면 운영체제에게 메모리 권한을 넘겨줌
- 효율적인 메모리 사용 가능
- main() 함수에 선언된 변수의 메모리는, main 함수의 특성상 프로그램이 종료될때 까지 유지되므로 전역변수에서 선언한 것 처럼 할당 됨
- 함수를 호출하는 방법으로 큰 메모리를 사용하는것이 더 효율적
- stack 메모리의 관리는 운영체제가 하는것이 원칙이나, 프로그램 실행시 stack 메모리의 크기가 할당되는것 compile 단계에서 결정됨
- stack 의 메모리가 늘었다 해제되었다 하는 동작이 매우 빠름
- stack에 선언된 지역 변수들은 속도가 빠름
- 프로그램의 대부분의 경우 메모리를 예측하기 힘듬
- Compile 단계에서 메모리 크기를 미리 할당해 주기가 어려움
- Heap 메모리 공간을 사용하여 필요한 순간마다 공간을 할당받아 사용
- 자유 공간을 stack 메모리와 함께 사용하면서 메모리 주소가 겹치는 문제가 발생 할수 있는것을 가상 메모리 주소를 사용하는것으로 해결
- Heap 영역의 메모리는 다 사용한 메모리를 반납해야 함
- 메모리를 관리하는 운영체제에 직접 호출하여 할당받고 반납하며 사용하기 때문에 느리게 동작
- c 는 unmanaged memory 언어
이 글의 모든 사진과 내용의 출처는 홍정모 교수님께 있음을 알려드립니다.
'Language > C' 카테고리의 다른 글
[따배씨] 12.3 변수의 영역과 연결 상태, 객체의 지속 기간 (0) | 2021.06.13 |
---|---|
[따배씨] 12.2 객체와 식별자, L-value 와 R-value (0) | 2021.06.13 |
[따배씨] 11.11 문자열을 숫자로 바꾸는 방법들 (0) | 2021.06.10 |
[따배씨] 11.10 명령줄 인수 (0) | 2021.06.10 |
[따배씨] 11.9 문자함수 ctype.h 를 문자열에 사용하기 (0) | 2021.06.10 |
Comments