일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Tips강좌
- c언어 표준입력함수
- c언어 printf
- C언어 자료형
- c언어 지역변수와 전역변수
- C언어 반복문
- 지식나눔강좌
- c언어 배열
- c언어 포인터의 addressing
- c언어 포인터
- C언어 조건문
- c언어 변수
- Tips프로그래밍강좌
- c언어 포인터의 캐스팅
- C언어 연산자
- C언어 문자열
- c언어 함수
- Tipssoft
- C언어 상수
- c언어 배열과 포인터
- c언어 시프트연산자와 비트연산자
- c언어 void와 void 포인터
- c언어 표준출력함수
- c언어 static과 const
- c언어 포인터와 const 키워드
- c언어 포인터의 주소연산
- 김성엽
- c언어 2진수 출력
- Today
- Total
거북이와 개구리의 끄적끄적
7일차_C언어(프로세스와 메모리 모델, 메모리 할당, 다차원 포인터) 본문
7일차_C언어
이 글은 Tips 7일차 강의를 듣고 정리한 내용입니다.
잘못된 내용, 보충할 내용, 궁금한 내용 있으시다면 댓글 달아주시면 감사하겠습니다.
오늘의 목차는 아래와 같습니다.
-프로세스와 메모리 모델
-메모리 할당(정적할당과 동적할당)
-다차원 포인터
1.프로세스와 메모리 모델
<프로세스>
우리가 소스파일을 짜고 빌드해서 만들어진 프로그램은 디스크에 저장되어있음.
이 프로그램을 실행시키면 메모리로 load되고, CPU가 사용가능함. 이런 상태를 프로세스라고 부름.
프로세스는 2종류가 있음.
1.heavy-weight-process
우리가 흔히 말하는 process임.
2.light-weight-process
윈도우즈에서는 thread라고 부름.
이런 프로세스들은 세그먼트라고 불리는것들의 집합체.
C언어로 만들어진 프로그램은 어떤 형태로 디스크에 저장되어 있을까?
또 이 프로그램이 메모리로 load될 때 어떤 구조를 형성할까?
<메모리 모델>
우리가 소스파일을 짜고 빌드해서 만들어진 프로그램은 디스크에 저장되어있음.
이 프로그램을 실행시키면 메모리로 load되고, CPU가 사용가능함. 이런 상태를 프로세스라고 부름.
프로세스는 2종류가 있음.
1.heavy-weight-process
우리가 흔히 말하는 process임.
2.light-weight-process
윈도우즈에서는 thread라고 부름.
이런 프로세스들은 세그먼트라고 불리는것들의 집합체.
C언어로 만들어진 프로그램은 어떤 형태로 디스크에 저장되어 있을까?
또 이 프로그램이 메모리로 load될 때 어떤 구조를 형성할까?
<메모리 모델>
사진1. 메모리모델위의 사진은 C언어로 만들어진 프로세스의 메모리 모델이다.C언어로 짜여진 프로그램은 디스크에 기계어 명령문과 문자열 상수목록으로 이루어져 있다.
기계어와 문자열 상수 목록이 메모리에 load되면서 나머지 영역을 만들게 된다.영역별 설명 쭈르륵
<스택>
스택을 2가지 관점에서 설명할 수 있다.
<스택 프레임>
언어별로 다름
스택을 이용한 C언어의 기술
컴파일시 결정되어 고정적이므로 BP를 기준으로 포인터 연산이 가능.
2.메모리 할당
<정적 할당>
사진. 변수선언 코드 및 메모리컴파일시 함수별 변수들을 보고 컴파일러가 스택영역에 스택프레임을 만드는 것.즉, 스택영역은 컴파일러가 관리하며 컴파일시 스택프레임의 구조가 결정 됨.개발자 입장에서 편리하지만 컴파일시 구조가 결정되므로 융통성이 없고 컴파일러에 의존적.*스택영역을 많이쓰게되면?프로그램의 구조를 변경하려면 재컴파일이 필수재컴파일은 재배포를 의미하고 재배포에는 비용이 들어가므로 좋지 않다.
<동적 할당>
정적할당이 컴파일러에 의해 관리된다면 동적할당은 내가 직접 관리하는것.
malloc(memory allocation)이란 함수와 free함수를 이용하여 관리.
malloc을 이용하여 힙 영역에 메모리를 할당하고 free함수를 이용하여 할당된 메모리를 해제한다.
예시코드 및 메모리
동적할당을 사용할때 2가지 문제점이 발생할 수 있다.
1.속도 저하
힙을 사용하면 OS의 관리를 받음
OS의 관리를 받는다는건 절차가 복잡합
절차가 복잡하면 시간이 오래걸림
해결방법은? 할당할 때 한번에 크게 할당하고, 내가 직접 관리하면 됨.
2.단편화
동적할당 되는 메모리의 크기가 다르면 발생
사진. 단편화 설명(malloc(4),free,malloc(8))
해결방법은? 자료구조의 크기를 통합하면 됨
<정적 할당 vs 동적 할당>
3.다차원 포인터
<등장 배경>
<다차원 포인터 & 동적 할당>
아래 코드 예제코드로 넣을것int* ip = (int*)malloc(4*sizeof(int)); // int형 데이터 4개 할당.int** idp = (int**)malloc(4*sizeof(int*)); // int*형 데이터 4개 할당.메모리도
<동적 할당을 이용한 3차원 배열 만들기>
예제코드및 메모리배열 표기법과 혼용법. 3차니까 8가지 나오겠죠
읽어주셔서 감사하고 강의정리가 너무 늦어져서 죄송합니다.
'공부 > 팁스' 카테고리의 다른 글
6일차_C언어(포인터의 const키워드와 주소연산과 캐스팅과 addressing, 표준입력함수, 배열과 포인터) (0) | 2018.07.19 |
---|---|
5일차_C언어(조별과제, 포인터) (0) | 2018.07.19 |
4일차_C언어(시프트연산자와 비트연산자, 지역변수와 전역변수, static과 const, 배열, 문자열) (2) | 2018.07.19 |
3일차_C언어(printf,연산자,제어문[조건문,반복문]) (5) | 2018.07.05 |
2일차_C언어(상수, 변수, 함수, 표준출력함수) (2) | 2018.07.02 |