πŸ‘Š CS/ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄λ‘ 

[ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄λ‘ ] 9. κΈ°μ–΅ μž₯μ†Œ λ°°λ‹Ή

ν•œκ·œμ§„ 2022. 6. 7. 23:15

9.1 정적 및 동적 κΈ°μ–΅ μž₯μ†Œ λ°°λ‹Ή

정적 κΈ°μ–΅ μž₯μ†Œ ν• λ‹Ή

  • λ²ˆμ—­ μ‹œκ°„μ— ν• λ‹Ή
  • κΈ°μ–΅μž₯μ†Œ 크기와 μœ„μΉ˜κ°€ μ •μ μœΌλ‘œ κ³ μ •
  • λ°°μ—΄ μ ‘κ·Όμ½”λ“œκ°€ 효율적 (크기가 κ³ μ •λ˜μ–΄ 있기 λ•Œλ¬Έμ—)
  • μ„œλΈŒν”„λ‘œκ·Έλž¨μ€ recursion을 μˆ˜ν–‰ν•  수 μ—†μŒ

동적 κΈ°μ–΅ μž₯μ†Œ ν• λ‹Ή

  • μ‹€ν–‰ μ‹œκ°„μ— ν• λ‹Ή
  • λ³€μˆ˜ μ œν•œ μ™„ν™” (μžλ£Œν˜•, 크기 λ“±)
  • 인터프리터 μ–Έμ–΄..

c, c++ 같은건 정적 동적 λ‹€ 함. static / auto

 

9.2 λ‹¨μœ„ ν”„λ‘œκ·Έλž¨ (module)

  • μ„ μ–Έ κ°€λŠ₯ : μ§€μ—­ μ‹λ³„μž λ„μž…
  • μ§€μ—­ λ³€μˆ˜ : λ‹¨μœ„ ν”„λ‘œκ·Έλž¨μ—μ„œ μ„ μ–Έν•˜μ—¬ μ‚¬μš©ν•˜λŠ” λ³€μˆ˜ (즉, ν•΄λ‹Ή λͺ¨λ“ˆμ— μ—†λŠ” λ³€μˆ˜λŠ” non-local ν˜Ήμ€ global λ³€μˆ˜μ΄λ‹€)
  • ν™œμ„±ν™” μƒνƒœ : ν•œ λ‹¨μœ„ ν”„λ‘œκ·Έλž¨μ˜ μ‹€ν–‰ μ‹œμž‘λΆ€ν„° μ’…λ£ŒκΉŒμ§€
  • 블둝도 λ‹¨μœ„ ν”„λ‘œκ·Έλž¨μ— μ†ν•œλ‹€.

λ‹¨μœ„ ν™œμ„±ν™” (unit activation)

  • μ‹€ν–‰ μ‹œκ°„μ— ν•œ λ‹¨μœ„ ν”„λ‘œκ·Έλž¨μ΄ ν‘œν˜„λœ μƒνƒœ
  • μ½”λ“œλΆ€, ν™œμ„±λ ˆμ½”λ“œλ‘œ ꡬ성

μ½”λ“œλΆ€

  • λͺ…λ Ήμ–΄λ“€λ‘œ ꡬ성
  • κ³ μ • 크기, λ‚΄μš© λΆˆλ³€

ν™œμ„± λ ˆμ½”λ“œ

  • μ§€μ—­ λ³€μˆ˜ λ“± ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ μ‹œ μš”κ΅¬λ˜λŠ” 정보듀
  • 가변적인 크기, λ‚΄μš©
  • λ°˜ν™˜μ£Όμ†Œ : λ°˜ν™˜μ‹œ μ‹€ν–‰ μ£Όμ†Œ. 호좜자의 μ½”λ“œ
  • 동적 링크 : ν˜ΈμΆœν•œ λ‹¨μœ„ ν”„λ‘œκ·Έλž¨μ˜ ν™œμ„± λ ˆμ½”λ“œ μ£Όμ†Œ.. 동적 내포관계 ν‘œν˜„. μ»΄νŒŒμΌλŸ¬κ°€ λ°œκ²¬ν•˜μ§€ λͺ»ν•œ non-local variable듀을 동적 링크λ₯Ό 타고 κ°€λ©° 탐색
  • <-> 정적 링크 : μ»΄νŒŒμΌλŸ¬κ°€ λ§Œλ“  정적 내포 관계 νŠΈλ¦¬μ—μ„œμ˜ 링크

 

9.3 정적 κΈ°μ–΅ μž₯μ†Œ ν• λ‹Ή

  • ν•˜λ‚˜μ˜ λ©”μΈν”„λ‘œκ·Έλž¨κ³Ό λ‹€μˆ˜μ˜ μ„œλΈŒ ν”„λ‘œκ·Έλž¨μœΌλ‘œ ꡬ성
  • κΈ°μ–΅μž₯μ†Œμ˜ 총 μš©λŸ‰ : λ²ˆμ—­μ‹œκ°„μ— 계산 (μ‹€ν–‰μ‹œκ°„μ— λ³€ν•˜μ§€ μ•ŠμŒ)
  • λͺ¨λ“  λ³€μˆ˜μ˜ μ˜€ν”„μ…‹ κ³ μ • (μ£Όμ†Œμ— λŒ€μ‘)

정적 λ³€μˆ˜(static variable)

  • λ²ˆμ—­ μ‹œκ°„μ— 크기가 κ³ μ •, λ²ˆμ—­ μ‹œκ°„μ— ν• λ‹Ή
  • 수λͺ…은 ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ μ‹œκ°„κ³Ό λ™μΌμ‹œ 됨 (μ£Ό ν”„λ‘œμ‹œμ € μ§„μž… ~ μ£Ό ν”„λ‘œμ‹œμ € νƒˆμΆœ)

μž₯점

  • κ΅¬ν˜„ 용이, 간결함
  • 효율적인 ν”„λ‘œκ·Έλž¨ μ‹€ν–‰

단점

  • λΆ€μ‘±ν•œ μœ μ—°μ„± -> λ°°μ—΄ 크기 λΆˆλ³€, recursion λΆˆκ°€
  • ν™œμ„±ν™” λ˜μ§€ μ•Šμ€ ν™œμ„± λ ˆμ½”λ“œκ°€ 상주 (였λ₯˜ 처리 루틴 λ“±)

 

9.4 μŠ€νƒ 기반 κΈ°μ–΅ μž₯μ†Œ λ°°λ‹Ή

동적 κΈ°μ–΅ μž₯μ†Œ ν• λ‹Ή 기법

  • μŠ€νƒν• λ‹Ή (for automatic allocation), νž™ ν• λ‹Ή (for dynamic alloc)
  • λŒ€λΆ€λΆ„μ˜ 컴파일러 μ–Έμ–΄μ—μ„œ μ‚¬μš©ν•˜λŠ” ν˜•νƒœ
  • ALGOLμœ μ‚¬μ–Έμ–΄ : ν™œμ„± λ ˆμ½”λ“œμ˜ 크기 바인딩 μ‹œκ°„ : λ²ˆμ—­μ‹œκ°„, ν™œμ„±ν™” μ‹œμ , 동적 λ³€ν™”

쀀정적 (semi-static) λ³€μˆ˜

  • κΈ°μ–΅ μž₯μ†Œ 크기 (offset) : λ²ˆμ—­ μ‹œκ°„μ— κ³ μ • (정적 바인딩)
  • κΈ°μ–΅ μž₯μ†Œ ν• λ‹Ή : μ‹€ν–‰ μ‹œκ°„ (동적 ν• λ‹Ή)
  • (μ •μ μ΄λž‘ λΉ„μŠ·ν•œλ° 할당이 μ‹€ν–‰μ‹œκ°„μ΄λΌ 쀀정적)

쀀동적 (semi-dynamic) λ³€μˆ˜

  • κΈ°μ–΅ μž₯μ†Œ 크기 : ν™œμ„±ν™” μ‹œμ  바인딩 (동적 바인딩)
  • κΈ°μ–΅ μž₯μ†Œ ν• λ‹Ή : 동적 ν• λ‹Ή (μŠ€νƒ)
  • (λ™μ μ΄λž‘ λΉ„μŠ·ν•œλ° 크기가 ν•œλ²ˆ μ •ν•΄μ§€λ©΄ 고정이라 쀀동적)

동적 λ³€μˆ˜ (dynamic) λ³€μˆ˜

  • μ‹€ν–‰ μ‹œ λ³€μˆ˜ 크기가 μˆ˜μ‹œλ‘œ λ³€ν•  수 μžˆλŠ” λ³€μˆ˜
  • ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ 쀑 생성/ν•΄μ œ κ°€λŠ₯
  • νž™ ν• λ‹Ή (μŠ€νƒμ— μŒ“λ‹€λ³΄λ©΄ 동적 λ³€μˆ˜μ˜ 크기λ₯Ό λ³€κ²½μ‹œν‚€μ§€ λͺ»ν•˜κΈ° λ•Œλ¬Έ)
  • μŠ€νƒμ—λŠ” λͺ…μ„Έν‘œλ§Œ μ €μž₯ν•˜κ³ , μ‹€μ œ λ°μ΄ν„°λŠ” νž™μ— μ €μž₯ν•΄μ„œ μ„œλ‘œλ₯Ό ν¬μΈν„°λ‘œ μ—°κ²°

  • 파슀칼의 conformant array(적응 λ°°μ—΄) λŠ” λ°°μ—΄μ˜ ν˜• μ •μ˜(μ‚¬μ΄μ¦ˆλ₯Ό λ™μ μœΌλ‘œ λ°›μ•„μ˜¬ 수 있음)λ₯Ό ν¬ν•¨ν•˜λŠ” ν˜•μ‹ λ§€κ°œλ³€μˆ˜

-> 쀀동적 λ³€μˆ˜λ‘œ λ§Œλ“ λ‹€

 

Non-Local Variable의 μ°Έμ‘° 방법

  • λ‹€λ₯Έ ν™œμ„± λ ˆμ½”λ“œμ˜ λ³€μˆ˜ μ°Έμ‘°
  • Local Variable은 μžμ‹ μ˜ μ§€μ—­ ν™˜κ²½(Local Environment)에 μœ„μΉ˜ν•  κ²ƒμž„
  • Non_local Variable은 λΉ„μ§€μ—­ ν™˜κ²½ (Non-Local Environment) μ–΄λ”˜κ°€μ— μœ„μΉ˜ν•  κ²ƒμž„

ex) Fortran의 μ§€μ—­ λ³€μˆ˜λŠ” ν˜„μž¬ λ‹¨μœ„ ν”„λ‘œκ·Έλž¨ ν™œμ„± λ ˆμ½”λ“œμ— μœ„μΉ˜ν•¨
ex) Fortran의 μ „μ—­ λ³€μˆ˜λŠ” μ‹œμŠ€ν…œ 제곡 ν™œμ„± λ ˆμ½”λ“œ

ex) Algol-like μ–Έμ–΄μ˜ μ§€μ—­ λ³€μˆ˜λŠ” ν˜„μž¬ λ‹¨μœ„ ν”„λ‘œκ·Έλž¨ ν™œμ„± λ ˆμ½”λ“œμ— μœ„μΉ˜ν•¨
ex) Algol-like μ–Έμ–΄μ˜ λΉ„μ§€μ—­ λ³€μˆ˜λŠ” 정적 내포 관계λ₯Ό 따라 검색해 감

 

9.5 νž™ κΈ°μ–΅ μž₯μ†Œ ν• λ‹Ή

μ˜μ—­ κ·œμΉ™

  • 정적 μ˜μ—­ κ·œμΉ™ : λ²ˆμ—­ κΈ°λ²•μ—μ„œ μ‚¬μš©
  • 동적 μ˜μ—­ κ·œμΉ™ : 인터프리터 κ·œμΉ™μ—μ„œ μ‚¬μš©
  • 동적 κΈ°μ–΅ μž₯μ†Œ 할당은 νž™μ„ μ‚¬μš©