User Tools

Site Tools


blog:pointers_and_memory_efficiency

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
blog:pointers_and_memory_efficiency [2025/09/05 20:45] hyjeongblog:pointers_and_memory_efficiency [2025/09/05 20:46] (current) hyjeong
Line 14: Line 14:
   * 배열 이름은 배열 첫 원소의 주소와 같음   * 배열 이름은 배열 첫 원소의 주소와 같음
   * 예시:   * 예시:
-    <code cpp> +<code cpp> 
-    char str[] = "Piano"; +char str[] = "Piano"; 
-    char* p = str;  // p == &str[0] +char* p = str;  // p == &str[0] 
-    </code>+</code>
   * 차이점:   * 차이점:
-    * `str`은 상수 주소 (다른 곳을 가리킬 수 없음) +     * `str`은 상수 주소 (다른 곳을 가리킬 수 없음) 
-    * `p`는 다른 문자열을 가리킬 수 있음+     * `p`는 다른 문자열을 가리킬 수 있음
  
 == 3. 문자열 저장 방식 비교 == == 3. 문자열 저장 방식 비교 ==
 === (1) 2차원 배열 (비효율적) === === (1) 2차원 배열 (비효율적) ===
-    <code cpp> +<code cpp> 
-    char names[3][12] = {"Piano", "Guitar", "Violin"}; +char names[3][12] = {"Piano", "Guitar", "Violin"}; 
-    </code> +</code> 
-    * 모든 문자열이 고정 크기(12바이트)를 차지 +  * 모든 문자열이 고정 크기(12바이트)를 차지 
-    * 남는 공간은 낭비 +  * 남는 공간은 낭비 
-    * 전체가 SRAM에 저장됨 → 아두이노에서 메모리 부족 위험+  * 전체가 SRAM에 저장됨 → 아두이노에서 메모리 부족 위험
  
 === (2) 포인터 배열 (효율적) === === (2) 포인터 배열 (효율적) ===
-    <code cpp> +<code cpp> 
-    const char* names[3] = {"Piano", "Guitar", "Violin"}; +const char* names[3] = {"Piano", "Guitar", "Violin"}; 
-    </code> +</code> 
-    * RAM에는 문자열 주소(포인터)만 저장 (2바이트씩) +  * RAM에는 문자열 주소(포인터)만 저장 (2바이트씩) 
-    * 실제 문자열은 플래시 메모리에 저장됨 +  * 실제 문자열은 플래시 메모리에 저장됨 
-    * 훨씬 효율적+  * 훨씬 효율적
  
 == 4. 다차원 배열 vs 포인터 배열 == == 4. 다차원 배열 vs 포인터 배열 ==
Line 48: Line 48:
   * `const char*`만으로도 대부분 플래시에 저장됨   * `const char*`만으로도 대부분 플래시에 저장됨
   * 확실히 플래시에만 보관하려면 `PROGMEM` 사용:   * 확실히 플래시에만 보관하려면 `PROGMEM` 사용:
-    <code cpp> +<code cpp> 
-    const char string_0[] PROGMEM = "Piano"; +const char string_0[] PROGMEM = "Piano"; 
-    const char* const names[] PROGMEM = { string_0 }; +const char* const names[] PROGMEM = { string_0 }; 
-    </code>+</code>
   * 꺼낼 때는 `pgm_read_word()` 필요 → 코드가 복잡해짐   * 꺼낼 때는 `pgm_read_word()` 필요 → 코드가 복잡해짐
  
blog/pointers_and_memory_efficiency.1757072726.txt.gz · Last modified: by hyjeong