ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [CS] ํ”„๋กœ์„ธ์Šค ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ
    ๐Ÿ–ฅCS 2022. 1. 18. 00:24

    แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2022-01-17 แ„‹แ…ฉแ„’แ…ฎ 2 23 32

    Code (Text)

    • ํ”„๋กœ๊ทธ๋žจ์— ์žˆ๋Š” ์ฝ”๋“œ๋กœ, ํ•จ์ˆ˜, ์ œ์–ด๋ฌธ, ์ƒ์ˆ˜ ๋“ฑ
      ใ…ค

    Static data (Data)

    • ์ •์  ๋ณ€์ˆ˜ (global variables), ์ƒ์ˆ˜ ๋ฐฐ์—ด (constant arrays), ๋ฌธ์ž์—ด (strings)๊ณผ ๊ฐ™์€ ์ •์  ๋ณ€์ˆ˜ (static variables)
    • ์ดˆ๊ธฐํ™”๋œ ๋ฐ์ดํ„ฐ๋Š” data ์˜์—ญ์— ์ €์žฅ๋˜๊ณ , ์ดˆ๊ธฐํ™”๋˜์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ๋Š” BSS (Block Stated Symbol) ์˜์—ญ์— ์ €์žฅ๋œ๋‹ค.
    • ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์‹œ ์ƒ์„ฑ๋˜๊ณ , ํ”„๋กœ๊ทธ๋žจ์ด ์ข…๋ฃŒ๋˜๋ฉด ์‹œ์Šคํ…œ์— ๋ฐ˜ํ™˜๋œ๋‹ค.
      ใ…ค

    Heap

    • ํ• ๋‹นํ•ด์•ผํ•  ๋ฉ”๋ชจ๋ฆฌ์˜ ํฌ๊ธฐ๋ฅผ ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋˜๋Š” ๋™์•ˆ ๊ฒฐ์ •ํ•ด์•ผํ•˜๋Š” ๊ฒฝ์šฐ. (๋Ÿฐํƒ€์ž„)

    • ๋™์ ์œผ๋กœ ํ• ๋‹น๋œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„. malloc, new ๋ช…๋ น์œผ๋กœ ํ• ๋‹น

    • ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ ๊ฐ’์— ์˜ํ•ด์„œ๋งŒ ์ฐธ์กฐ๋˜๊ณ  ์‚ฌ์šฉ๋˜๋Š” ์˜์—ญ

    • ์•„๋ž˜ โ†’ ์œ„๋กœ ์ž๋ผ๋‚œ๋‹ค. ์ฆ‰, ๋‚ฎ์€ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ โ†’ ๋†’์€ ์ฃผ์†Œ์˜ ๋ฐฉํ–ฅ์œผ๋กœ ํ• ๋‹น ๋ฐ›๋Š” ๊ฒƒ

        import Foundation
      
        let num = 5
        let arr = [Int](repeating: num, count: num)
      
        // ์—ฌ๊ธฐ์„œ ๋ฐฐ์—ด arr์— ํ• ๋‹นํ•ด์•ผํ•  ๋ฉ”๋ชจ๋ฆฌ์˜ ํฌ๊ธฐ๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋˜๋Š” ๋™์•ˆ ๊ฒฐ์ •๋œ๋‹ค.

    ใ…ค

    Stack

    • ์Šคํƒ ์‚ฌ์ด์ฆˆ๊ฐ€ ์ปดํŒŒ์ผ ์‹œ์ ์— ๊ฒฐ์ •

    • ๋กœ์ปฌ ๊ฐ’ (local value), ๋ฐฐ์—ด (array) ๊ทธ๋ฆฌ๊ณ  ์ž„์‹œ๋กœ ์ €์žฅ๋œ ๋ ˆ์ง€์Šคํ„ฐ ๊ฐ’

    • ํ”„๋กœ๊ทธ๋žจ์ด ์ž๋™์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ์ž„์‹œ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ

    • ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ๋งˆ๋‹ค ์ง€์—ญ ๋ณ€์ˆ˜, ๋งค๊ฐœ๋ณ€์ˆ˜์™€ ๋ฆฌํ„ด ๊ฐ’๋“ฑ์ด ์Œ“์ธ๋‹ค.

    • ์œ„ โ†’ ์•„๋ž˜๋กœ ์ž๋ผ๋‚œ๋‹ค. ์ฆ‰, ๋†’์€ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ โ†’ ๋‚ฎ์€ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ์˜ ๋ฐฉํ–ฅ์œผ๋กœ ํ• ๋‹น ๋ฐ›๋Š” ๊ฒƒ.

    • ์•„๋ž˜ ์˜ˆ์‹œ๋ฅผ ๋ณด๋ฉด factorial(10)์„ ํ˜ธ์ถœํ–ˆ์„ ๊ฒฝ์šฐ, factorial(10)์—๋Š” factorial(10)์˜ $fp, $sp๊ฐ€ ํ• ๋‹น๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ฐจ๋ก€๋Œ€๋กœ factorial(9), factorial(8)... ์„ ํ˜ธ์ถœํ•˜๋ฉด์„œ ์Šคํƒ ์˜์—ญ์— ํ• ๋‹นํ•œ๋‹ค. ์ด ๋•Œ factorial(9)์˜ $fp์—๋Š” factorial(10)์˜ ๋ฆฌํ„ด ์ฃผ์†Œ๊ฐ€ ํ• ๋‹น๋œ๋‹ค. factorial(9)๊ฐ€ ๋ฆฌํ„ด๋˜๋ฉด ๋Œ์•„๊ฐˆ ๊ณณ์˜ ์ฃผ์†Œ๋ฅผ ์ €์žฅํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. factorial(1)๊นŒ์ง€ ํ˜ธ์ถœ์„ ๋‹ค ํ•˜๋ฉด, ์ฐจ๋ก€๋Œ€๋กœ ๋‹ค์‹œ ๋ฆฌํ„ด์ด ๋˜๋ฉด์„œ ์Šคํƒ์„ ์›๋ž˜ ์ƒํƒœ๋กœ ๋ณต์›ํ•œ๋‹ค.

        func factorial(n: Int) -> Int {
            if n < 1 { return 1 }
            else {
                return n * factorial(n: n - 1)
            }
        }
      
        factorial(10)
        // ์—ฌ๊ธฐ์„œ factorial(10) -> factorial(9) -> .. factorial(

    แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2022-01-17 แ„‹แ…ฉแ„’แ…ฎ 5 55 54

    $fp (frame pointer)

    • ํ”„๋ ˆ์ž„์˜ ์‹œ์ž‘ ์ฃผ์†Œ
    • ํ•ญ์ƒ ํ˜„์žฌ ์Šคํƒ ํ”„๋ ˆ์ž„์˜ base (์‹œ์ž‘ ์œ„์น˜)๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค. ์—ฌ๊ธฐ์— return address๊ฐ€ ๋“ค์–ด๊ฐ„๋‹ค.
    • ์Šคํƒ ํ”„๋ ˆ์ž„์€ ํ”„๋กœ์‹œ์ € ํ”„๋ ˆ์ž„, ํ™œ์„ฑํ™” ๋ ˆ์ฝ”๋“œ๋ผ๊ณ ๋„ ๋ถ€๋ฅธ๋‹ค.
    • $fp๋Š” $sp๋ฅผ ํ˜ธ์ถœํ•จ์œผ๋กœ์จ ์ดˆ๊ธฐํ™”๋˜๊ณ , $sp๋Š” return ์‹œ $fp๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ณต์›๋œ๋‹ค.
      ใ…ค

    $sp (stack pointer)

    • ์Šคํƒ์˜ top์„ ๊ฐ€๋ฆฌํ‚ค๋Š”๋ฐ, stack์˜ last word๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค๊ณ ๋„ ํ•œ๋‹ค.
      ใ…ค

    ์™œ recursive ํ•จ์ˆ˜์˜ ๋น„์šฉ์ด ๋น„์‹ผ๊ฐ€?

    • ๋ชจ๋“  ํ”„๋กœ์„ธ์„œ ์•ˆ์˜ ๋ ˆ์ง€์Šคํ„ฐ ์ •๋ณด๋ฅผ ์Šคํƒ์— ๋ณด๊ด€ํ•ด๋‘๊ณ , ๋‚˜์ค‘์— ๋‹ค์‹œ ๊ฐ€์ ธ์˜ค๋Š” ์ž‘์—…์ด ๋นˆ๋ฒˆํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”๋ชจ๋ฆฌ ์—ฐ์‚ฐ์ด ๋งŽ์ด ์ผ์–ด๋‚˜์„œ ์„ฑ๋Šฅ์ด ๋Š˜์–ด๋‚  ์ˆ˜ ์žˆ๋‹ค.

    '๐Ÿ–ฅCS' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

    [CS] ์Šค์ผ€์ค„๋ง  (0) 2022.01.24

    ๋Œ“๊ธ€

Designed by Tistory.