반응형
- 프로그램 카운터 : 명령어를 한 줄씩 실행해서 메모리에 적재
- 스택 포인터 : 현재 가리키고 있는 스택 메모리 주소
- 스택 프레임 : 현재 유효한 스택 메모리 공간
- 메모리 주요 섹션 : cmd의 "objdump -h 실행파일명" 명령으로 상세정보 확인 가능
- .text : 함수가 모여있음, main 등 (ROM에서 담당)
- .data : 변수 (RAM)
- .rdata : 문자열같이 변하지 않는 값 (ROM)
- .bss : 할당되지 않은 변수, 초기값 0 (RAM)
- 임베디드칩 일반적 구성
- ARM : CPU
- NORF : NOR Flash, ROM의 일종, build time에 담김
- SRAM : 스택과 힙 메모리를 여기에 저장, 실제 실행 시간(rum time)에 담김
- 타입
- Simple Type
- char : 1바이트
- short : 2바이트
- int : 일반적 4바이트, 사이즈는 워드 수(레지스터가 한 번에 쓸 수 있는 사이즈) 따라감, Atmega 시리즈에선 2바이트
- long : 8바이트
- float : 4바이트 (소수점 뒤 7번째까지 유효 숫자, 유효 숫자 : 사이즈 * 2 - 1)
- double : 8바이트
- 등..
- Aggregation Type
- array
- struct
- union
- 등..
- 번외 <stdtype.h> 타입 : int8_t, int16_t 등
- Simple Type
- 문자열(char[]) : 문자와 달리 주소값을 저장함
- 핵심 함수
- strcpy
- strcat
- strlen
- strcmp
- 핵심 함수
- 연산자 우선순위 : 1차 연산((), [], ., ->) > 단항 연산 > 산술 연산 > 관계 연산 > 논리 연산
- 변수의 속성
- scope : 값을 인식 가능한 범위 ex) 전역, 지역, 함수, ...
- lifetime : 메모리에 해당 값을 보유하고 있는 기간 ex) 스택, 레지스터, other .c file, ...
- 스토리지 클래스
- static : 파일이 실행되고 끝날때 라이프타임이 시작하고 끝남, 전역으로 사용하면 파일 스코프,함수 앞에도 사용 가능
- register : 메모리가 아닌 레지스터에 보관
- auto (기본값)
- const : lvalue로 오지 못하게 막음, 무조건 수정이 불가능한 것은 X, * 연산자로 수정 가능, 우측에 있는 값에만 적용됨
- 포인터
- & 연산자 : promote 연산자, 차원(= *의 개수)을 1단계 올려줌, lvalue 위치에는 사용 불가
- * 연산자 :
- Block head에 있을 때 : 포인터 지정 연산자
- Block body에 있을 때 : demote 연산자, 차원을 1단계 내림
- 배열
- 배열 변수는 const라 직접 대입이 불가능함
- [] 연산자 :
- Block head에 있을 때 : 배열 지정 연산자
- Block body에 있을 때 : 인덱스 연산자, a[i] == *(a+i)

- distance 연산 (주소 - 주소 연산)
- 주소 + 주소 연산은 불가능
- 주소 + 정수(스탭으로 암묵적 변환) 연산 가능
- 결과값은 스탭 단위
- 스탭 : 타입의 크기 단위 (ex : 4 == int 타입의 스탭 1)
- 컴파일 : .c 파일 -> .o 파일
- 링크 : 여러 .o 파일 -> 실행 파일

- 2차원 배열을 함수 인자로 전달하는법 : void func(int (*pp)[x축 크기])
- 2차원 이상의 배열은 2차원 이상의 포인터로 받을 수 없음
- *함수는 pp를 2차원 배열이라 생각하지 않기 때문에 int 스텝만큼만 움직여서 예상한것처럼 2차원 배열 스텝만큼 움직이지 않음
- 배열 타입은 알아서 스텝을 인지함
- int *pp[크기]도 연산자 우선순위로 인해 배열 타입이므로 대입이 X
- 함수 인자로 온 배열은 값 대입이 가능함 (= 배열이 아니라 포인터임, c에서 예외적으로 허용해놓음, 좋은 방식은 X)
- 2차원 이상의 배열은 2차원 이상의 포인터로 받을 수 없음
- 함수 포인터 : 함수를 받아 포인터로 사용
- int (*p)(); 처럼 선언하고 실제 함수를 p = f 처럼 대입해서 사용
- 함수 포인터를 매개변수로 갖는 함수도 가능
- void 포인터 : 형 변환이 필수적
- malloc(크기-바이트)
- stdlib.h에 존재
- 저장 공간을 할당하고 void* 형 반환
- free(주소) : 해당 주소의 메모리 내용을 반환
- 힙 메모리 : 개발자가 동적으로 할당, malloc으로 할당
- 구조체 struct : 다른 타입의 멤버들을 여러개 보관하는 자료구조
- 바이트 얼라이먼트 : 가장 큰 멤버의 사이즈에 맞춰서 다른 멤버들에 추가로 패딩을 넣어서 크기를 맞춤
- 구조체.멤버
- 구조체->멤버 : 구조체가 1차원 이상일 때
- typedef 키워드 : type의 alias
- typedef 기존타입 새타입명
VEDA 바로가기 : https://www.vedacademy.co.kr/
본 후기는 한화비전 VEDA 2기 학습 기록으로 작성되었습니다.
반응형
'프로그래밍 > 한화비전 VEDA' 카테고리의 다른 글
| 한화비전 VEDA 2기 : 5주차 (Qt 실습평가, 임베디드 시스템 이해) 정리 (3) | 2025.04.20 |
|---|---|
| 한화비전 VEDA 2기 : 4주차 (Qt) 정리 (2) | 2025.04.13 |
| 한화비전 VEDA 2기 : 3주차 (C++) 정리 (1) | 2025.04.07 |
| 한화비전 VEDA 2기 : 2주차(C, C++) 정리 (1) | 2025.03.30 |