junbin2 2025. 8. 22. 12:28

βœ… 1. λ°°μ—΄μ˜ μ •μ˜

  • μΌμ •ν•œ μ°¨λ‘€λ‚˜ 간격에 따라 λ²Œμ—¬ λ†“μŒ
  • μ°¨λ‘€(μˆœμ„œ)와 κ΄€λ ¨λœ 기본적인 μžλ£Œκ΅¬μ‘°μ΄λ‹€.
  • μ›μ†Œμ˜ λ©”λͺ¨λ¦¬ 곡간(메인 λ©”λͺ¨λ¦¬, DDR)의 물리적인 μœ„μΉ˜λ₯Ό μˆœμ„œμ μœΌλ‘œ κ²°μ •ν•˜λŠ” νŠΉμ§•μ΄ μžˆλ‹€.
  • λ°°μ—΄μ˜ μˆœμ„œλŠ” λ©”λͺ¨λ¦¬ κ³΅κ°„μ—μ„œ μ €μž₯λ˜λŠ” μ›μ†Œκ°’μ˜ 물리적 μˆœμ„œμ™€ κ°™λ‹€.
  • μΈλ±μŠ€μ™€ μ›μ†Œκ°’( indext, value ) 의 쌍으둜 이루어져 있음.

(1) λ°°μ—΄μ˜ 의미

  • 인덱슀둜 ν‘œν˜„λ˜λŠ” μˆœμ„œλ₯Ό κ°–λŠ” νŠΉμ • 배열이 μ‘΄μž¬ν•˜λ©°, κ·Έκ³³μ—λŠ” μˆœμ„œλŒ€λ‘œ μ›μ†Œκ°€ λ“€μ–΄κ°€κ²Œ λœλ‹€.
  • μ›μ†Œλ“€μ΄ λͺ¨λ‘ 같은 μžλ£Œν˜•κ³Ό 같은 크기의 κΈ°μ–΅ 곡간을 κ°€μ§€κ²Œ λœλ‹€.
  • λ°°μ—΄μ˜ μΈλ±μŠ€κ°’μ„ μ΄μš©ν•΄μ„œ μ›μ†Œκ°’μ— μ ‘κ·Όν•˜κΈ° λ•Œλ¬Έμ— 직접 접근이 κ°€λŠ₯함

[ λ°°μ—΄μ˜ 인덱슀 κ°’ ]

  • μ»΄ν“¨ν„°μ˜ λ‚΄κ΅¬κ΅¬μ‘°λ‚˜ λ©”λͺ¨λ¦¬ μ£Όμ†Œμ™€ λ¬΄κ΄€ν•˜κ²Œ κ°œλ°œμžμ—κ²Œ κ°œλ…μ μœΌλ‘œ μ •μ˜λ˜λŠ” μΆ”μƒν™”λœ 값이닀.
  • λ©”λͺ¨λ¦¬ μ£Όμ†Œκ°’μ€ μ‹€μ œ λ©”λͺ¨λ¦¬μ˜ 물리적인 μœ„μΉ˜κ°’μ„ μ˜λ―Έν•¨.
  • λ°°μ—΄μ˜(μΆ”μƒν™”λœ) μΈλ±μŠ€κ°’μ€ ν”„λ‘œκ·Έλž˜λ° 언어와 컴파일 과정을 톡해 λ©”λͺ¨λ¦¬ μ£Όμ†Œκ°’κ³Ό 연결이 됨.
  • 즉, ν”„λ‘œκ·Έλž¨ μ‹€ν–‰κ³Ό λ™μ‹œμ— μš΄μ˜μ²΄μ œκ°€ μ‚¬μš©λ˜μ§€ μ•ŠλŠ” λ©”λͺ¨λ¦¬ 곡간을 μ΄ˆκΈ°ν™”ν•΄μ„œ μ£Όμ†Œκ°’κ³Ό 데이터λ₯Ό ν• λ‹Ήν•΄μ€Œ.

  • μΈλ±μŠ€λŠ” μΆ”μƒν™”λœ κ°œλ…μ΄κ³ , μ£Όμ†Œκ°’μ€ κ·Έ 좔상화λ₯Ό κ΅¬ν˜„ν•œ μ‹€μ œ ν•˜λ“œμ›¨μ–΄ λ©”λͺ¨λ¦¬ 츑면의 μ£Όμ†Œκ°’μΈ 것이닀.
  • 사싀은 κ΅¬ν˜„ν•œ λ©”λͺ¨λ¦¬ μ£Όμ†Œκ°’ λ˜ν•œ μš΄μ˜μ²΄μ œκ°€ ν• λ‹Ήν•΄μ£ΌλŠ” 값이지 μ‹€μ œ λ©”λͺ¨λ¦¬λŠ” κ·Έλƒ₯ μ…€λ‘œλ§Œ 이루어져 있음.

βœ… 2. λ°°μ—΄μ˜ 좔상 μžλ£Œν˜•

(1) μΆ”μƒμžλ£Œν˜•

  • 객체 및 κ΄€λ ¨λœ μ—°μ‚°μ˜ μ •μ˜λ‘œ ꡬ성됨.
  • 자료ꡬ쑰 κ΅¬ν˜„μ „μ˜ 섀계 단계
  • 자료의 좔상화 κ²°κ³Όλ₯Ό μˆ˜ν•™μ μœΌλ‘œ μ •μ˜ 내린것이 μΆ”μƒμžλ£Œν˜•μ΄λ‹€.
  • 이후 이 μΆ”μƒμžλ£Œν˜•μ„ κ΅¬ν˜„ν•˜λ©΄ μžλ£Œκ΅¬μ‘°κ°€ λ˜λŠ”κ²ƒμž„.

(2) μžλ£Œν˜•

  • λ©”λͺ¨λ¦¬ μ €μž₯ 할당을 μœ„ν•œ λ³€μˆ˜ μ„ μ–Έ
  • 즉, λ³€μˆ˜κ°€ λ©”λͺ¨λ¦¬λ₯Ό ν• λ‹Ή λ°›κΈ° μœ„ν•΄μ„œ ν•„μš”λ˜λŠ” 곡간을 μ •μ˜ν•˜λŠ”κ²ƒμ΄ μžλ£Œν˜•μ΄λΌκ³  함.
  • 자료ꡬ쑰의 κ΅¬ν˜„ 단계(ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄λ₯Ό μ΄μš©ν•œ μ„ μ–Έ)μ—μ„œλ„ μžλ£Œν˜•μ΄ 선언이 됨.

(3) ADT Array 객체: <i index, e Element> μŒλ“€μ˜ μ§‘ν•©

  • Index: μˆœμ„œλ₯Ό λ‚˜νƒ€λ‚΄λŠ” μ›μ†Œμ˜ μœ ν•œμ§‘ν•©
  • Element: μžλ£Œν˜•μ΄ 같은 μ›μ†Œμ˜ μ§‘ν•©

  • (1) create: 배열을 μƒμ„±ν•΄λ‚΄λŠ” μ—°μ‚°
  • (2) retrieve: κ°’ μ°ΎκΈ°
  • (3) store: μ›ν•˜λŠ” μœ„μΉ˜μ— κ°’ μ €μž₯
  • 이것이 μˆ˜ν•™μ μœΌλ‘œ λ§Œλ“€μ–΄μ§„ μΆ”μƒμžλ£Œν˜• 즉, 섀계가 될 수 있음.

(4) 정리

  • κΈ°λ³Έμžλ£Œν˜•μ€ 기본적으둜 μ œκ³΅ν•΄μ£ΌλŠ” μžλ£Œν˜•μ΄κ³ , μΆ”μƒμžλ£Œν˜•μ€ λ‚΄κ°€ μž„μ˜λ‘œ λ§Œλ“€ 수 μžˆλŠ” λŠλ‚Œ
  • 즉, 객체 λ˜ν•œ μΆ”μƒμžλ£Œν˜• λ²”μ£Ό μ•ˆμ— λ“€μ–΄κ°„λ‹€κ³  λ³΄λŠ”κ²Œ λ§žλŠ” 것 κ°™μŒ.
  • 결둠은 μžλ°”μ—μ„œ κ΅¬ν˜„ 된 μžλ£Œκ΅¬μ‘°λŠ” κ²°κ΅­ μΆ”μƒμžλ£Œν˜•μ„ 객체둜 κ΅¬ν˜„ν•œ κ²ƒμœΌλ‘œ λ³Ό 수 μžˆλ‹€.

βœ… 3. λ°°μ—΄μ—°μ‚°μ˜ κ΅¬ν˜„

(1) λ°°μ—΄μ˜ 생성

void create(int n) { // n = 5
    int a[n];
    int i;
    for(i=0, i<n, i++){
        a[i] = 0;
    }
}

int a[3]; // κ°œλ°œμžκ°€ ν˜ΈμΆœν•˜λ©΄ create() κ°€ 호좜이 λœλ‹€.
  • ν•΄λ‹Ή κ΅¬ν˜„μœΌλ‘œ 배열을 λ§Œλ“€κ²Œ 되면, λ©”λͺ¨λ¦¬ 곡간에 μ •μˆ˜λ‘œ 이루어진 배열이 λ§Œλ“€μ–΄μ§€κ³  λ‚΄λΆ€μ—μ„œλŠ” 3개의 곡간이 할당됨.
  • ν•΄λ‹Ή create() ν•¨μˆ˜λ₯Ό λ‚΄λΆ€μ μœΌλ‘œ 호좜 ν•œλ‹€κ³  μƒκ°ν•˜λ©΄ λœλ‹€. ν•˜μ§€λ§Œ C μ–Έμ–΄μ—μ„œλŠ” ν•¨μˆ˜ ν˜ΈμΆœμ€ μ•ˆν•˜κ³  있음.

(2) λ°°μ—΄κ°’μ˜ 검색(retrieve μ—°μ‚°)

#define array_size 5
int retrieve(int *a, int i) {
    if(i >= 0 && i < array_size )
        return a[i];
    else { 
        printf("Erro\n";
        return(-1);
    }
}

K = a[2]; // 2번째의 값을 λ°˜ν™˜
  • a[2] λ₯Ό ν•˜λ©΄ λ‚΄λΆ€μ μœΌλ‘œ retrieve() 호좜둜 2번째의 λ°°μ—΄μ˜ 값을 λ°˜ν™˜ 받을 수 μžˆλ‹€. ( μ»΄νŒŒμΌλŸ¬κ°€ ν•΄μ€Œ CλŠ” ν•¨μˆ˜ μ—†μŒ )

(3) λ°°μ—΄κ°’μ˜ μ €μž₯(store μ—°μ‚°)

#define array_size 5
void store(int *a, int i, int e) { // i = 3, e =35
    if(i >= 0 && < array_size) {
        a[i] = e;
    } else {
        printf("Error\n");
    }
}

a[3] = 3; // μ €μž₯ λ‚΄λΆ€μ μœΌλ‘œ ν•¨μˆ˜ 호좜 ( CλŠ” μ•„λ‹˜ )
  • a[3] = 3; store() ν•¨μˆ˜κ°€ 호좜이 되며 3번째 인덱슀의 μ›μ†Œκ°’μΈ 3을 넣을 수 있게 λœλ‹€.

(4) 정리

  • μΆ”μƒμžλ£Œν˜•μ„ 기반으둜 μ‹€μ œ ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄μ—μ„œ 자료ꡬ쑰λ₯Ό κ΅¬ν˜„ ν•˜κ²Œ λ˜λŠ” 것이닀.
  • λ©”λͺ¨λ¦¬λŠ” λΉ„νŠΈλ‘œ 된 μ…€ ν˜•νƒœλ₯Ό 띄고 있으며, λΉ„νŠΈλ§ˆλ‹€ μ£Όμ†Œκ°’μ„ κ°€μ§€κ³  μžˆλ‹€.
  • ν”„λ‘œκ·Έλž˜λ°μ—μ„œλŠ” λΉ„νŠΈ λ‹¨μœ„κ°€ μ•„λ‹Œ λ°”μ΄νŠΈ λ‹¨μœ„λ‘œ 관리가 λœλ‹€.
  • μžλ£Œν˜•μ— λ§žλŠ” λ°°μ—΄μ΄ λ§Œλ“€μ–΄μ§€κ²Œ λ˜λ©΄, ν•΄λ‹Ή μžλ£Œν˜•μ˜ λΉ„νŠΈμ— λ§žκ²Œ λ°°μ—΄ μΈλ±μŠ€μ˜ ν•˜λ‚˜ν•˜λ‚˜ ν¬κΈ°κ°€ μ •ν•΄μ§€κ²Œ λœλ‹€. 
  • 즉, char(문자) νƒ€μž…μ€ 1λ°”μ΄νŠΈλ‘œ 8λΉ„νŠΈμ΄λ©° char ν˜•νƒœλ‘œ 배열이 λ§Œλ“€μ–΄μ§€λ©΄ μΈλ±μŠ€λ§ˆλ‹€ 1λ°”μ΄νŠΈ(8λΉ„νŠΈ)의 ν˜•νƒœλ₯Ό λ„κ²Œ λœλ‹€.

βœ… 4. 1차원 λ°°μ—΄

(1) 1차원 λ°°μ—΄μ˜ μ •μ˜

  • A[i] λŠ” λ°°μ—΄μ˜ 첫 번째 μ›μ†Œ A[0] 이 μ €μž₯된 λ©”λͺ¨λ¦¬ μ£Όμ†ŒμΈ a λ‘œλΆ€ν„° μ‹œμž‘ν•˜μ—¬, A[0] λΆ€ν„° A[i-1] κ°œκΉŒμ§€ i개의 λ°°μ—΄ A[]λ₯Ό μ§€λ‚˜μ„œ μ €μž₯됨
  • λ”°λΌμ„œ, A[] 의 λ©”λͺ¨λ¦¬ μ‹œμž‘μ£Όμ†Œλ₯Ό a 라고 κ°€μ •ν•˜λ©΄, A[i] 의 λ©”λͺ¨λ¦¬ μ €μž₯ μ£Όμ†ŒλŠ” [a +i*k] κ°€ 됨

(2) 1차원 λ°°μ—΄μ—μ„œμ˜ μ£Όμ†Œ 계산

  • μ‰½κ²Œλ§ν•΄, ν•˜λ“œμ›¨μ–΄ λ©”λͺ¨λ¦¬ μΈ‘λ©΄μ—μ„œ 1λ°”μ΄νŠΈμ˜ μΈλ±μŠ€λ₯Ό κ°€μ§€λŠ” λ°°μ—΄μ΄ μ‘΄μž¬ν•œλ‹€κ³  κ°€μ •ν•˜λ©΄ A[0]... λͺ¨λ“  λ°°μ—΄ μ›μ†Œκ°’은 1λ°”μ΄νŠΈ μ¦‰, 8λΉ„νŠΈμ˜ κ³΅κ°„을 κ°€μ§€κ²Œ λœλ‹€. 
  • λ˜ν•œ ν•˜λ“œμ›¨μ–΄ λ©”λͺ¨λ¦¬ μΈ‘λ©΄μ—μ„œλŠ” λΉ„νŠΈκ°€ λͺ¨μΈ μ…€ ν˜•νƒœλ₯Ό κ°€μ§€λ©°, μš΄μ˜μ²΄μ œλŠ” μ΄ λΉ„νŠΈλ₯Ό λ°”μ΄νŠΈ λ‹¨μœ„λ‘œ μͺΌκ°œμ„œ κ΄€λ¦¬λ₯Ό ν•œλ‹€. 
  • 즉, μ£Όμ†Œκ°’은 λ°”μ΄νŠΈ λ‹¨μœ„λ‘œ κ°€μ§€κ²Œ λœλ‹€λŠ” μ˜λ―Έμ΄λ‹€. 
  • λ˜ν•œ λ°°μ—΄μ˜ νŠΉμ • 인덱슀의 μ›μ†Œκ°’μ„ μ–»μ–΄λ‚΄λ €λ©΄ A[0] λ°°μ—΄μ˜ μ‹œμž‘μ£Όμ†Œλ₯Ό a , i = 인덱슀, k = λ°”μ΄νŠΈ 수 라고 가정을 ν•˜κ³  A[3] μ €μž₯ μ£Όμ†Œλ₯Ό κ΅¬ν•œλ‹€κ³  κ°€μ •ν•˜λ©΄ a + i * k 의 κ°’μœΌλ‘œ λ°°μ—΄μ˜ 크기λ₯Ό ꡬ할 수 μžˆλ‹€.
  • κ³„μ‚°ν•˜λ©΄ μ£Όμ†Œ = 0x0001 + 2 * 1 = 0x0003 의 κ²°κ³Όλ₯Ό μ–»κ²Œ λœλ‹€. 즉, μ£Όμ†Œκ°’ 0x0003 을 얻을 수 μžˆλ‹€.

βœ… 5. λ°°μ—΄μ˜ ν™•μž₯

(1) ν–‰λ ¬μ˜ λ°°μ—΄ ν‘œν˜„

  • 행렬을 μ»΄ν“¨ν„°μ—μ„œ ν‘œν˜„ν•˜κΈ°μ—λŠ” 2차원 배열이 맀우 적합함.

(2) ν–‰λ ¬μ˜ 2차원 λ°°μ—΄ ν‘œν˜„

(3) ν–‰ μš°μ„  λ°°μ—΄

  • 1차원 배열을 μ—¬λŸ¬ 개 μŒ“μ•„ 놓은 것이 2차원 λ°°μ—΄
  • 즉, 2차원 배열을 μͺΌκ°œμ„œ 1차원 λ°°μ—΄λ‘œμ¨ λ΄„μœΌλ‘œμ¨ λ©”λͺ¨λ¦¬μ— 2차원 배열을 ν‘œν˜„ ν•  수 있게 λœλ‹€.

(4) ν–‰ μš°μ„  ν• λ‹Ή

  • κ°€λ‘œμ˜ 1차원 λ°°μ—΄ λ‹¨μœ„λ‘œ λ©”λͺ¨λ¦¬ μ˜μ—­μ„ μš°μ„  할당함
  • 행을 μš°μ„ μœΌλ‘œ ν•˜μ—¬, 컴퓨터 λ©”λͺ¨λ¦¬μ— μ €μž₯을 ν•˜κ²Œ λœλ‹€.
  • ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄λ§ˆλ‹€ μ•½κ°„μ”© λ‹€λ₯Ό 수 있음.

(5) μ—΄ μš°μ„  λ°°μ—΄

  • 1차원 배열을 μ—¬λŸ¬ 개 μ„Έμ›Œ 놓은 것 λ˜ν•œ 2차원 λ°°μ—΄λ‘œ λ³Ό 수 있으며, 열을 μš°μ„ μœΌλ‘œ ν•˜λŠ” 배열이닀.
  • ν•΄λ‹Ή 열을 λ©”λͺ¨λ¦¬ μ…€μ˜ μˆœμ„œλŒ€λ‘œ μ €μž₯이 λœλ‹€.

(5) μ—΄ μš°μ„  ν• λ‹Ή

  • μ„Έλ‘œμ˜ 1차원 λ°°μ—΄ λ‹¨μœ„λ‘œ λ©”λͺ¨λ¦¬ μ˜μ—­μ„ μš°μ„  할당함

(6) C μ–Έμ–΄ μ—μ„œμ˜ 2차원 λ°°μ—΄

  • C μ–Έμ–΄μ—μ„œλŠ” ν–‰ μš°μ„  μˆœμ„œλ‘œ μ €μž₯이 되며, A[3][5] 을 μ„ μ–Έν•˜λ©΄ λ‹€μŒκ³Ό 같은 배열이 생성이 λœλ‹€.

βœ… 6. ν¬μ†Œν–‰λ ¬μ˜ κ°œλ…(ν‘œν˜„)

(1) ν¬μ†Œν–‰λ ¬

ν–‰λ ¬

  • μ›μ†Œκ°’μ΄ 0인 μ›μ†Œκ°€ κ·Έλ ‡μ§€ μ•Šμ€ μ›μ†Œλ³΄λ‹€ μƒλŒ€μ μœΌλ‘œ λ§Žμ€ 경우 즉, μ›μ†Œκ°’ 0이 κ³Όλ°˜μ„ λ„˜μ–΄κ°€λŠ” 경우 ν¬μ†Œν–‰λ ¬μ΄λΌν•¨.

 

2차원 λ°°μ—΄ - ν–‰λ ¬

  • ν˜„μž¬ 2차원 배열은 λ©”λͺ¨λ¦¬μ…€ 72개의 곡간을 μ‚¬μš©ν•˜κ³  있으며 10개의 μ‹€ μ‚¬μš© μ›μ†Œκ°’, 62개의 0 μ›μ†Œκ°’μ„ κ°€μ§€κ³  μžˆλ‹€.
  • λ¬Έμ œλŠ” μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” μ›μ†Œκ°’ λ•Œλ¬Έμ— λ©”λͺ¨λ¦¬μ˜ λΆˆν•„μš”ν•œ 곡간을 μ°¨μ§€ν•˜κ³  μžˆλŠ” λ¬Έμ œκ°€ 있음

(2) ν¬μ†Œν–‰λ ¬μ˜ 효율적 λ°°μ—΄ν‘œν˜„

  • 0인 μ›μ†ŒλŠ” μ €μž₯ν•˜μ§€ μ•Šκ³  0이 μ•„λ‹Œ κ°’λ§Œμ„ λ”°λ‘œ λͺ¨μ•„μ„œ μ €μž₯ν•˜λŠ” 방식
  • λ©”λͺ¨λ¦¬ λ‚­λΉ„λ₯Ό 막고 νš¨μœ¨μ„±μ„ ν–₯상 μ‹œν‚¬ 수 μžˆλ‹€.
  • λΆˆν•„μš”ν•œ 값인 0을 λΉΌκ³  ν–‰κ³Ό μ—΄μ˜ μΈλ±μŠ€κ°’κ³Ό μ›μ†Œκ°’μ„ λ§€μΉ­ν•΄μ„œ λ§Œλ“œλŠ” 방식
  • ν•˜μ§€λ§Œ, 이방식 λ˜ν•œ λ©”λͺ¨λ¦¬ μ„±λŠ₯은 μ˜¬λΌκ°€μ§€λ§Œ μ—°μ‚° λ³΅μž‘λ„κ°€ μ¦κ°€ν•˜λ©° μ—°μ‚° μ‹œκ°„μ΄ μ¦κ°€ν•˜κ²Œ λœλ‹€λŠ” λ¬Έμ œκ°€ μžˆλ‹€.
  • 즉, λ©”λͺ¨λ¦¬μ˜ μ„±λŠ₯을 올리면 μ—°μ‚°μ˜ μ‹œκ°„μ΄ μ¦κ°€ν•œλ‹€λŠ” λ¬Έμ œκ°€ 있고, λ°˜λŒ€λ‘œ μ—°μ‚°μ˜ μ‹œκ°„μ΄ κ°μ†Œν•˜λ©΄ λ©”λͺ¨λ¦¬μ˜ μ„±λŠ₯이 μ€„μ–΄λ“œλŠ” λ¬Έμ œκ°€ λ°œμƒν•œλ‹€. 정닡은 μ—†μŒ.