blog:pointers_and_memory_efficiency
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revision | |||
blog:pointers_and_memory_efficiency [2025/09/05 20:45] – hyjeong | blog:pointers_and_memory_efficiency [2025/09/05 20:46] (current) – hyjeong | ||
---|---|---|---|
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.1757072726.txt.gz · Last modified: by hyjeong