FW 심화 과정/[2] STM32심화실습

0728 C프로그래밍 기초 15~16강

천숭이 2022. 7. 28. 13:08

15강 - 배열과 포인터

 

 

char data[4]; 
char *p = &data[0];  // 배열 표기법을 포인터 표기법으로 변경

 

따라서,  배열의 이름은 배열의 시작주소다.

 

 # 배열과 포인터의 합체

char *p1부터 *p100까지 사용하고 싶은 경우 작성방법

char *p[N];  // -> *p[0] ~ *p[N-1]

 

 

 

 

 


16강 - 메모리/프로세스

 

# 프로그램과 프로세스

 

# 메모리 할당

데이터를 저장할 공간을 적정하게 나눈는 할당 작업

 

# 정적 메모리 할당

- 컴파일러가 소스 코드를 기계어로 번역하는 시점에 변수 크기에 맞게 메모리를 할당하는 것

- 수정이 필요하면 소스코드를 수정하고 다시 컴파일 해야함

- 프로그램이 실행될 때 메모리의 위치가 결정됨

- 전역 변수

 

 

# 변수가 메모리에서 유지되는 시간

전역변수 : 프로그램이 시작해서 종료할 때까지 유지, 실행 중 추가/삭제 불가,

지역변수 : 함수가 호출될 때 메모리에 할당됐다가 함수가 끝나면 사라짐, 스택 영역에 저장됨

 

# 정적 메모리 관리법

- 지역 변수를 사용하려면 그 변수의 현재 주소를 알아야 한다

- 변수의 개수만큼 포인터가 필요하다 -> 비효율적

- 메모리 start, end 포인터로 시작과 끝을 알림

 

# 스택

- 두 개의 포인터로 많은 양의 데이터를 효과적으로 관리하는 이론

(base pointer, stack pointer)

- 스택이 쌓일수록 스택포인터 주소는 감소한다.

 

 

 

# 동적메모리 관리

sp를 더하거나 빼서 공간을 확보하거나 반환한다

 

# 함수 호출 시

main문에서 함수를 만나면 main함수의 IP를  스택에 저장. sp 또한 증가

 

# 지역 변수와 스택

- sp가 bp와 같아지고, bp는 다음 bp까지 pop된다. 그럼 sp가 위에있고 bp가 아래있는 구조가 자연스럽게 만들어짐.