Computer Science/๊ธฐํƒ€

[์šด์˜์ฒด์ œ] ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ

_cactus 2021. 3. 6. 12:14
๋ฐ˜์‘ํ˜•

๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ

: program์„ ์‹คํ–‰์‹œํ‚ค๋ฉด ์šด์˜์ฒด์ œ๋Š” ์šฐ๋ฆฌ๊ฐ€ ์‹คํ–‰์‹œํ‚จ program์„ ์œ„ํ•ด ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ํ• ๋‹นํ•ด์คŒ.

์ฆ‰ os๋Š” program์„ ์‹คํ–‰์‹œํ‚ค๊ธฐ ์œ„ํ•œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ์ œ๊ณต

ํ• ๋‹น๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์€ stack, heap, data ์˜์—ญ์œผ๋กœ ๋‚˜๋ˆ ์ง

 

์ด๋Ÿฌํ•œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ด ์–ด๋– ํ•œ ์šฉ๋„๋กœ, ์–ธ์ œ, ์–ด๋””์„œ ํ• ๋‹น๋˜๋Š”๊ฐ€

  • ํ• ๋‹น ์‹œ๊ธฐ: ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋ ๋•Œ๋งˆ๋‹ค

  • ํ• ๋‹น ์žฅ์†Œ: main memory (RAM)

  • ํ• ๋‹น ์šฉ๋„: program ์‹คํ–‰ ์‹œ ํ•„์š”ํ•œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„(์ง€์—ญ/์ „์—ญ๋ณ€์ˆ˜ ์„ ์–ธ์„ ์œ„ํ•ด) ํ• ๋‹น

 

 

 

 

๋ฐ์ดํ„ฐ ์˜์—ญ

: ์ „์—ญ๋ณ€์ˆ˜์™€ static ๋ณ€์ˆ˜๊ฐ€ ํ• ๋‹น๋˜๋Š” ์˜์—ญ

  ํ”„๋กœ๊ทธ๋žจ์ด ์‹œ์ž‘๊ณผ ๋™์‹œ์— ํ• ๋‹น๋˜๊ณ  program์ด ์ข…๋ฃŒ๋˜๋ฉด ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์†Œ๋ฉธ๋จ

 

#include <stdio.h>

int a=10; // data ์˜์—ญ์— ํ• ๋‹น
int b=20; // program ์‹คํ–‰์‹œ, main ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜๊ธฐ ์ „์— data์˜์—ญ์— ํ• ๋‹น๋จ
          // -> progam์ด ์ข…๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ์กด์žฌ

int main(){
    ...
    return 0;
}

 

 

stack ์˜์—ญ

: ํ•จ์ˆ˜ ํ˜ธ์ถœ ์‹œ ์ƒ์„ฑ๋˜๋Š” ์ง€์—ญ๋ณ€์ˆ˜์™€ ๋งค๊ฐœ ๋ณ€์ˆ˜๊ฐ€ ์ €์žฅ๋˜๋Š” ์˜์—ญ

  ํ•จ์ˆ˜ ํ˜ธ์ถœ์ด ์™„๋ฃŒ๋˜๋ฉด ์‚ฌ๋ผ์ง

 

#include <stdio.h>

void func1(int);
void func2(int);

int a=10; // ์ „์—ญ๋ณ€์ˆ˜ a,b๊ฐ€ data์˜์—ญ์— ํ• ๋‹น๋จ
int b=20;

int main(){
    int i=100; // ์ง€์—ญ์„ ์ˆ˜ i๊ฐ€ stack ์˜์—ญ์— ํ• ๋‹น๋จ
    
    func1(i);
    func2(i);
    
    return 0;
}
void func1(int c){
    int d=30; // ๋งค๊ฐœ๋ณ€์ˆ˜ c์™€ ์ง€์—ญ๋ณ€์ˆ˜ d๊ฐ€ stack ์˜์—ญ์— ํ• ๋‹น๋จ -> ํ˜ธ์ถœ์ด ๋๋‚˜๋ฉด stack์—์„œ ์‚ญ์ œ๋จ
}
void func2(int e){
    int f=40; // ๋งค๊ฐœ๋ณ€์ˆ˜ e์™€ ์ง€์—ญ๋ณ€์ˆ˜ f๊ฐ€ stack ์˜์—ญ์— ํ• ๋‹น๋จ
}

 

 

 

heap ์˜์—ญ

: ํ•„์š”์— ์˜ํ•ด ๋™์ ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•  ๋•Œ ์‚ฌ์šฉ (ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ํ• ๋‹น)

 

heap์˜์—ญ์„ ์–ธ์ œ ํ• ๋‹นํ•˜๋Š”๊ฐ€

์˜ˆ) ๋ฐฐ์—ด

int main(){
    // ์ •์ƒ์ ์ธ ๋ฐฐ์—ด ์„ ์–ธ
    int arr[10];

    // ๋น„์ •์ƒ์ ์ธ ๋ฐฐ์—ด ์„ ์–ธ: ๋ฐฐ์—ด์˜ ๊ธธ์ด๋ฅผ ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ์ˆซ์ž๋กœ ์žก์•„์ฃผ๋Š” ๊ฒƒ
    int i=0;
    scanf("%d", &i);
    int arr[i];

    return 0;
}

 

์œ„์™€ ๊ฐ™์ด ์ฝ”๋“œ๋ฅผ ์ ์œผ๋ฉด ์ •์ƒ์ ์ธ ๋ฐฐ์—ด์˜ ์„ ์–ธ ๊ฒฝ์šฐ arr ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๊ฐ€ 40byte๋ผ๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์ง€๋งŒ ๋น„์ •์ƒ์ ์ธ ๋ฐฐ์—ด์„ ์–ธ์˜ ๊ฒฝ์šฐ i์˜ ํฌ๊ธฐ๊ฐ€ 4byte์ž„์€ ์•Œ ์ˆ˜ ์žˆ์ง€๋งŒ arr๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋Š” ์•Œ ์ˆ˜ ์—†๋‹ค.

 

๊ทธ๋ ‡๋‹ค๋ฉด...

int main(){
    int i=10;
    int arr[i];
 
    return 0;
}

 

์œ„์™€ ๊ฐ™์ด ์ ๋Š”๋‹ค๋ฉด arr ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๊ฐ€ 10 (40byte)์ด๋ผ๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์ง€ ์•Š์„๊นŒ?

-> NO

complieํ•˜๋Š” ๋™์•ˆ i๊ฐ€ 4byte ํฌ๊ธฐ์ž„์€ ์•Œ ์ˆ˜ ์žˆ์ง€๋งŒ i๊ฐ€ 10์œผ๋กœ ์ดˆ๊ธฐํ™”๋˜์—ˆ๋‹ค๋Š” ์‚ฌ์‹ค์€ ๋ฌด์‹œ๋จ

i=10์œผ๋กœ ์ดˆ๊ธฐํ™” ๋˜์—ˆ๋‹ค๋Š” ๊ฒƒ์€ ์‹คํ–‰๋˜๋Š” ๋™์•ˆ์ธ, run time์— ๊ฒฐ์ •๋จ

=> ๋”ฐ๋ผ์„œ complier๋Š” arr์˜ ํฌ๊ธฐ๊ฐ€ 40byte ๋ผ๋Š” ์‚ฌ์‹ค์„ ๋ชจ๋ฅธ๋‹ค!

 

heap ์˜์—ญ: ํ• ๋‹นํ•ด์•ผ ํ•  ๋ฉ”๋ชจ๋ฆฌ์˜ ํฌ๊ธฐ๋ฅผ ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋˜๋Š” ๋™์•ˆ ๊ฒฐ์ •ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ(run time) ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉ๋˜๋Š” ๊ณต๊ฐ„

 

  • ๋™์ ํ• ๋‹น: ์‹คํ–‰์‹œ๊ฐ„ ๋™์•ˆ ์‚ฌ์šฉํ•  ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ํ• ๋‹นํ•˜๋Š” ๊ฒƒ, ์‚ฌ์šฉ์ด ๋๋‚˜๋ฉด ์šด์˜์ฒด์ œ๊ฐ€ ์“ธ ์ˆ˜ ์žˆ๋„๋ก ๋ฐ˜๋‚ฉ (↔ ์ •์ ํ• ๋‹น: program์ด ์‹คํ–‰ํ•˜๋Š” ์ˆœ๊ฐ„ program์ด ์‚ฌ์šฉํ•  ๋ฉ”๋ชจ๋ฆฌ ํฌ๊ธฐ๋ฅผ ๊ณ ๋ คํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ์˜ ํ• ๋‹น์ด ์ด๋ฃจ์–ด์ง) 

    • C++์–ธ์–ด์—์„œ๋Š” new, delete ์—ฐ์‚ฐ์ž๋ฅผ ํ†ตํ•ด ๋™์ ํ• ๋‹น (Cํ•จ์ˆ˜๋„ ์ด์šฉ๊ฐ€๋Šฅ)

 

 

 


์ถœ์ฒ˜: http://dsnight.tistory.com/50 

์ด ๊ธ€์€ ์œ„ ์ถœ์ฒ˜ ๊ธ€์„ ์ฐธ๊ณ ํ•˜์—ฌ ์ž‘์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค

 

 

 

 

 

 

 

728x90
๋ฐ˜์‘ํ˜•