๊ด€๋ฆฌ ๋ฉ”๋‰ด

Algo ์“ฐ์ž

์Šคํ„ฐ๋””) ์ฒซ๋ฒˆ์งธ ์Šคํ„ฐ๋”” ํ”ผ๋“œ๋ฐฑ ๋ฐ ์งˆ๋ฌธ ์ •๋ฆฌ๋‚ด์šฉ ๋ณธ๋ฌธ

๐Ÿ’ป Programming Language/C#

์Šคํ„ฐ๋””) ์ฒซ๋ฒˆ์งธ ์Šคํ„ฐ๋”” ํ”ผ๋“œ๋ฐฑ ๋ฐ ์งˆ๋ฌธ ์ •๋ฆฌ๋‚ด์šฉ

S.Honey 2022. 4. 8. 09:21

1. ์ฐธ์กฐ ํ˜•์‹์„ ๋ฉ”์†Œ๋“œ์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋„˜๊ฒจ ํ• ๋‹น ํ›„ ๋ณ€ํ™”๋ฅผ ์ฃผ๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ?


class MyField
{
    public int field1;
    public int field2;
}

class AssignRefType
{
    public static void addVal(MyField obj)
    {
        MyField temp = obj;
        temp.field1++;
        temp.field2++;
    }
    public static void subVal(MyField obj)
    {
        MyField temp = obj;
        temp.field1--;
        temp.field2--;
    }
    static void Main(string[] args)
    {
        MyField mf = new MyField() { field1 = 1, field2 = 2 };
        MyField mf1 = new MyField() { field1 = 3, field2 = 4 };
        MyField mf2 = new MyField() { field1 = 5, field2 = 6 };

        AssignRefType.addVal(mf);
        AssignRefType.addVal(mf1);
        AssignRefType.addVal(mf2);

        Console.WriteLine("----------Add----------");
        Console.WriteLine("mf  : field1 : {0}, field2 : {1}",mf.field1,mf.field2);
        Console.WriteLine("mf1 : field1 : {0}, field2 : {1}", mf1.field1, mf1.field2);
        Console.WriteLine("mf2 : field1 : {0}, field2 : {1}", mf2.field1, mf2.field2);

        AssignRefType.subVal(mf);
        AssignRefType.subVal(mf1);
        AssignRefType.subVal(mf2);

        Console.WriteLine("\n----------Subtract----------");
        Console.WriteLine("mf  : field1 : {0}, field2 : {1}", mf.field1, mf.field2);
        Console.WriteLine("mf1 : field1 : {0}, field2 : {1}", mf1.field1, mf1.field2);
        Console.WriteLine("mf2 : field1 : {0}, field2 : {1}", mf2.field1, mf2.field2);
    }
}
Output

----------Add----------
mf  : field1 : 2, field2 : 3
mf1 : field1 : 4, field2 : 5
mf2 : field1 : 6, field2 : 7

----------Subtract----------
mf  : field1 : 1, field2 : 2
mf1 : field1 : 3, field2 : 4
mf2 : field1 : 5, field2 : 6
  • stack ๋ฉ”๋ชจ๋ฆฌ์— ์žˆ๋Š” ์ฃผ์†Œ๊ฐ’์„ ๋ณต์‚ฌํ•ด์„œ ๋„ฃ์–ด์คฌ๊ธฐ์— ๊ฐ’์ž์ฒด๋Š” ๋ณ€ํ™”๋ฅผ ์ค„ ์ˆ˜ ์žˆ์ง€๋งŒ ์™„์ „ํžˆ static ๋ฉ”์†Œ๋“œ ๋‚ด๋ถ€์— ์žˆ๋Š” temp ๊ฐ์ฒด์— ์ƒˆ๋กœ์šด heap๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ํ• ๋‹นํ•œ ๊ฒƒ์€ ์•„๋‹˜.

2. Entity Framework์—์„œ DB Connection ์ข…๋ฃŒ์™€ ๊ด€๋ จํ•ด ๋‚ด๋ถ€์ ์œผ๋กœ ์ข…๋ฃŒ์ž๋ฅผ ๋™์ž‘์‹œํ‚ค๋Š” ๊ฒƒ์ธ์ง€? (Framework ๋‚ด๋ถ€ ๋™์ž‘ ์กฐ์‚ฌ.)



3. OS ๊ด€๋ จ => ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ฐจ์ง€ํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ.


  • ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ฐจ์ง€ํ•˜๊ณ  ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ดํŽด๋ณด๋ฉด ํฌ๊ฒŒ Code, Data, Heap, Stack ์˜ ์˜์—ญ์œผ๋กœ ๋‚˜๋ˆ„์–ด์ ธ ์žˆ๋‹ค.
  • ์ด๋“ค ๊ฐ๊ฐ์„ segment๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

Stack
โ†“

์—ฌ์œ  ํ• ๋‹น ๊ณต๊ฐ„
(for Stack & Heap)

โ†‘
Heap
Bss
(์ดˆ๊ธฐํ™” ๋˜์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ)
Data
(์ดˆ๊ธฐํ™”๋œ ๋ฐ์ดํ„ฐ)
Text

์ •์  ์„ธ๊ทธ๋จผํŠธ


Text (Code)
  • ์ œ์ผ ์•„๋ž˜ Text ๋ถ€๋ถ„์ด ์ฝ”๋“œ ๋ถ€๋ถ„์ด๋‹ค.
  • ์ž‘์„ฑํ•œ ์ฝ”๋“œ๊ฐ€ ๋“ค์–ด๊ฐ€๋Š” ๋ถ€๋ถ„์ด๊ณ  ๊ธฐ๊ณ„์–ด๋„ ํฌํ•จ๋œ๋‹ค.
  • ํ•ด๋‹น ์˜์—ญ์€ read only ์˜์—ญ์ด๊ธฐ์— ์“ฐ๊ธฐ ์ž‘์—…์„ ์‹œ๋„ํ•˜๋ฉด access violation ์ด ๋ฐœ์ƒํ•œ๋‹ค.
  • ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ข…๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ์œ ์ง€๋˜๋Š” ์˜์—ญ์ด๋‹ค.

Data
  • ์ „์—ญ๋ณ€์ˆ˜(global), ์ •์ ๋ณ€์ˆ˜(static), ๋ฐฐ์—ด(array), ๊ตฌ์กฐ์ฒด(struct) ๋“ฑ์ด ์ €์žฅ๋œ๋‹ค.

    • ์ดˆ๊ธฐํ™” ๋œ ๋ฐ์ดํ„ฐ : Data ์— ์ €์žฅ
    • ์ดˆ๊ธฐํ™” ๋˜์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ : bss(Block Stated Symbol)์— ์ €์žฅ
  • Bss๋„ ์ดˆ๊ธฐํ™”๋ฅผ ํ•จ. ๋‹จ, ๊ฐ’์„ ์ดˆ๊ธฐํ™” ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ๋ฉ”๋ชจ๋ฆฌ ์ƒ์˜ ๊ณต๊ฐ„์„ ์ดˆ๊ธฐํ™” ์‹œํ‚ค๋Š” ๊ฒƒ.

    • ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์—Bss๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๊ฒŒ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ ์œผ๋กœ ๋ณด๋ฉด ๋” ํšจ์œจ์ ์ด๋ผ ํ•  ์ˆ˜ ์žˆ์Œ.
  • ์ •๋ฆฌํ•˜์ž๋ฉด Data ์˜์—ญ์ด ๋Ÿฐํƒ€์ž„ ์ด์ „์— ์ดˆ๊ธฐํ™” ํ•˜๋Š” ๊ฒƒ์ด๋ผ๋ฉด Bss๋Š” ๋Ÿฐํƒ€์ž„ ์ดํ›„์— ์ดˆ๊ธฐํ™” ํ•˜๋Š” ๊ฒƒ.

  • Data ์˜์—ญ๋„ ํ”„๋กœ์„ธ์Šค์˜ ์ข…๋ฃŒ์‹œ๊นŒ์ง€ ์œ ์ง€๋จ.


(์ฃผ์˜!) ํ•จ์ˆ˜ ๋‚ด๋ถ€(main ๋ฉ”์†Œ๋“œ ํฌํ•จ)์˜ ๋ณ€์ˆ˜๋“ค์€ ์—ฌ๊ธฐ์— ํ•ด๋‹น๋˜์ง€ ์•Š๋Š”๋‹ค.

๋™์  ์„ธ๊ทธ๋จผํŠธ


Heap
  • ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ๋™์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ์˜์—ญ์ด๋‹ค.
  • malloc, free ๋˜๋Š” new, delete์— ์˜ํ•˜์—ฌ ํ• ๋‹น ๋˜๋Š” ๋ฐ˜ํ™˜๋˜๋Š” ์˜์—ญ์ด๋‹ค.
  • ์ž๋ฐ”๋‚˜ C++, C#๊ณผ ๊ฐ™์ด garbage collector๊ฐ€ ํ™œ๋™ํ•˜๋Š” ๊ฒฝ์šฐ ์ž๋™์œผ๋กœ ๋ฐ˜ํ™˜๋˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ๋‹ค.

Stack
  • ์ง€์—ญ๋ณ€์ˆ˜, ๋งค๊ฐœ๋ณ€์ˆ˜, ๋ณต๊ท€๋ฒˆ์ง€ ๋“ฑ์ด ์ €์žฅ๋˜์–ด ์žˆ๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ์ž๋™์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ์ž„์‹œ ๋ฉ”๋ชจ๋ฆฌ์ด๋‹ค.
  • ํ•จ์ˆ˜ ํ˜ธ์ถœ ์‹œ ์ƒ์„ฑ๋˜๊ณ , ํ•จ์ˆ˜ ์ข…๋ฃŒ์‹œ ๋ฐ˜ํ™˜๋œ๋‹ค.
  • ๊ทธ๋ฆฌ๊ณ  Stack์œผ๋กœ๋ถ€ํ„ฐ ์œ ์ถ” ๊ฐ€๋Šฅํ•˜๋“ฏ์ด Last in First Out(LIFO)์ •์ฑ…์„ ์‚ฌ์šฉํ•œ๋‹ค.
  • ๋งˆ์ง€๋ง‰์œผ๋กœ ๋‹ค๋ฅธ ์„ธ๊ทธ๋จผํŠธ๋“ค์ด ํ•˜์œ„ ์˜์—ญ์œผ๋กœ ํ• ๋‹น๋˜์ง€๋งŒ Stack ์„ธ๊ทธ๋จผํŠธ๋Š” ์ƒ์œ„์˜์—ญ๋ถ€ํ„ฐ ํ• ๋‹น๋œ๋‹ค.

Heap ์˜์—ญ์ด ์ปค์ง€๋ฉด Stack ์˜์—ญ์ด ์ž‘์•„์ง€๊ฒŒ ๋˜๊ณ , ์—ญ๋„ ์„ฑ๋ฆฝ.
- Heap Overflow : Heap์ด Stack์˜์—ญ์„ ์นจ๋ฒ”ํ•˜๋Š” ๊ฒƒ.
- Stack Overflow : Stack์ด Heap ์˜์—ญ์„ ์นจ๋ฒ”ํ•˜๋Š” ๊ฒƒ.

[์ฐธ์กฐ] : https://box0830.tistory.com/150