blog:pointers_and_memory_efficiency
Differences
This shows you the differences between two versions of the page.
Next revision | Previous revision | ||
blog:pointers_and_memory_efficiency [2025/09/05 20:44] – created hyjeong | blog:pointers_and_memory_efficiency [2025/09/05 20:46] (current) – hyjeong | ||
---|---|---|---|
Line 4: | Line 4: | ||
* 메모리 주소를 저장하는 변수 | * 메모리 주소를 저장하는 변수 | ||
* 예시: | * 예시: | ||
- | | + | <code cpp> |
- | int a = 10; | + | int a = 10; |
- | int* p = & | + | int* p = & |
- | </ | + | </ |
* `p` 자체에는 주소가 들어있음 | * `p` 자체에는 주소가 들어있음 | ||
* `*p`를 하면 그 주소가 가리키는 값(예: 10)을 읽거나 수정할 수 있음 | * `*p`를 하면 그 주소가 가리키는 값(예: 10)을 읽거나 수정할 수 있음 | ||
Line 14: | Line 14: | ||
* 배열 이름은 배열 첫 원소의 주소와 같음 | * 배열 이름은 배열 첫 원소의 주소와 같음 | ||
* 예시: | * 예시: | ||
- | | + | <code cpp> |
- | char str[] = " | + | char str[] = " |
- | char* p = str; // p == & | + | char* p = str; // p == & |
- | </ | + | </ |
* 차이점: | * 차이점: | ||
- | | + | * `str`은 상수 주소 (다른 곳을 가리킬 수 없음) |
- | * `p`는 다른 문자열을 가리킬 수 있음 | + | |
== 3. 문자열 저장 방식 비교 == | == 3. 문자열 저장 방식 비교 == | ||
=== (1) 2차원 배열 (비효율적) === | === (1) 2차원 배열 (비효율적) === | ||
- | | + | <code cpp> |
- | char names[3][12] = {" | + | char names[3][12] = {" |
- | </ | + | </ |
- | * 모든 문자열이 고정 크기(12바이트)를 차지 | + | * 모든 문자열이 고정 크기(12바이트)를 차지 |
- | * 남는 공간은 낭비 | + | * 남는 공간은 낭비 |
- | * 전체가 SRAM에 저장됨 → 아두이노에서 메모리 부족 위험 | + | * 전체가 SRAM에 저장됨 → 아두이노에서 메모리 부족 위험 |
=== (2) 포인터 배열 (효율적) === | === (2) 포인터 배열 (효율적) === | ||
- | | + | <code cpp> |
- | const char* names[3] = {" | + | const char* names[3] = {" |
- | </ | + | </ |
- | * RAM에는 문자열 주소(포인터)만 저장 (2바이트씩) | + | * RAM에는 문자열 주소(포인터)만 저장 (2바이트씩) |
- | * 실제 문자열은 플래시 메모리에 저장됨 | + | * 실제 문자열은 플래시 메모리에 저장됨 |
- | * 훨씬 효율적 | + | * 훨씬 효율적 |
== 4. 다차원 배열 vs 포인터 배열 == | == 4. 다차원 배열 vs 포인터 배열 == | ||
Line 48: | Line 48: | ||
* `const char*`만으로도 대부분 플래시에 저장됨 | * `const char*`만으로도 대부분 플래시에 저장됨 | ||
* 확실히 플래시에만 보관하려면 `PROGMEM` 사용: | * 확실히 플래시에만 보관하려면 `PROGMEM` 사용: | ||
- | | + | <code cpp> |
- | const char string_0[] PROGMEM = " | + | const char string_0[] PROGMEM = " |
- | const char* const names[] PROGMEM = { string_0 }; | + | const char* const names[] PROGMEM = { string_0 }; |
- | </ | + | </ |
* 꺼낼 때는 `pgm_read_word()` 필요 → 코드가 복잡해짐 | * 꺼낼 때는 `pgm_read_word()` 필요 → 코드가 복잡해짐 | ||
blog/pointers_and_memory_efficiency.1757072696.txt.gz · Last modified: by hyjeong