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가 아래있는 구조가 자연스럽게 만들어짐.
'FW 심화 과정 > [2] STM32심화실습' 카테고리의 다른 글
0802 어셈블리어로 보드 제어 (sw / led) (0) | 2022.08.02 |
---|---|
[C] 유용한 함수작성 (0) | 2022.08.01 |
0729 C프로그래밍 기초 17~ (0) | 2022.07.29 |
0727 C프로그래밍 기초 14강 (0) | 2022.07.27 |
0727 C프로그래밍 기초 10~13강 (0) | 2022.07.27 |
0726 C프로그래밍 기초 1~3강 (0) | 2022.07.26 |