글

라벨이 memory인 게시물 표시

아두이노 메모리 관리

아두이노 IDE에서 스케치를 업로드할 때 표시되는 "dynamic memory" 사용량은 프로그램이 시작할 때 이미 할당된 글로벌 변수와 정적 변수에 대한 메모리 사용량을 나타냅니다. 이는 프로그램 실행 전에 미리 계산되는 고정된 값입니다. 실행 중에 추가적으로 RAM을 사용하는 것은 다음과 같은 경우에 발생할 수 있습니다: 1. **로컬 변수**: 함수 내부에서 선언된 로컬 변수는 함수가 호출될 때 스택 메모리에 할당됩니다. 함수가 종료되면 이 메모리는 해제됩니다. 2. **동적 할당**: `malloc()`, `calloc()`, `new` 같은 함수를 사용하는 동적 메모리 할당은 실행 중에 RAM을 추가로 사용합니다. 이 메모리는 `free()`나 `delete`를 통해 명시적으로 해제해야 합니다. 3. **재귀 호출**: 재귀 함수는 각 호출마다 스택 메모리를 사용합니다. 너무 깊은 재귀 호출은 스택 오버플로를 일으킬 수 있습니다. 4. **String과 기타 동적 객체**: 아두이노의 `String` 객체는 내부적으로 동적 할당을 사용합니다. 문자열 연산(결합, 추가, 수정 등)은 실행 중에 추가 메모리를 사용할 수 있으며, 이는 메모리 단편화를 일으킬 수 있습니다. ### 실시간 메모리 사용 모니터링 아두이노에서 실시간으로 메모리 사용량을 모니터링하는 것은 기본적으로 간단하지 않습니다. 하지만, 몇 가지 방법으로 현재 사용 가능한 메모리의 양을 추정할 수 있습니다: - **자유 메모리 계산 함수**: 사용 가능한 힙(Heap)과 스택(Stack) 메모리 사이의 간격을 계산하는 함수를 작성하여 현재 남은 메모리의 양을 추정할 수 있습니다. - **외부 라이브러리 사용**: 메모리 사용을 모니터링하는 데 도움이 되는 여러 아두이노 라이브러리가 있습니다. 예를 들어, `MemoryFree` 라이브러리 등이 있습니다. ### 주의사항 - 동적 메모리 할당은 메모리 누수와 단편화를 일으킬 위험이 있으므로, 가능한 한 피하는 것이 좋습니다. ...