C Programming Language/C

C์–ธ์–ด static, register, volatile ์ง€์ •์ž ๊ฐœ๋…

567Rabbit 2024. 6. 19. 12:13

https://codebunny99.tistory.com/122

 

CPU ๋ฉ”๋ชจ๋ฆฌ์— ๋Œ€ํ•ด ํ•™์Šตํ•˜๊ธฐ

(ํ˜•์‹) ๋ณ€์ˆ˜ = ๋ฐ์ดํ„ฐ =์„ ๊ธฐ์ค€์œผ๋กœ ์™ผ์ชฝ์€ ๋ณ€์ˆ˜, ์˜ค๋ฅธ์ชฝ์€ ๋ฐ์ดํ„ฐ๋ผ๊ณ  ํ•œ๋‹ค. count = 3 ์ฝ”๋“œ (Code) ์˜์—ญ:ํ”„๋กœ๊ทธ๋žจ์˜ "์š”๋ฆฌ์ฑ…"์ด๋ผ๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋‹ค.์š”๋ฆฌ์ฑ…์—๋Š” ์š”๋ฆฌ ๋ฐฉ๋ฒ•(๋ช…๋ น์–ด)๋“ค์ด ์ ํ˜€

codebunny99.tistory.com

 

 

 

์ €์žฅ ์œ ํ˜• ์ง€์ •์ž static

 

- ๋ณ€์ˆ˜์˜ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ฐ์ดํ„ฐ (Data) ์˜์—ญ์— ์ €์žฅ๋˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

#include <stdio.h>

void sub() {
    static int scount = 0;
    int acount = 0;
    printf("scount = %d\t", scount);
    
    printf("acount = %d\n", acount);
    scount++
    acount++
}

int main(void){

    sub();
    sub();
    sub();
   
    return 0;
   
}

 

 

 

 

์ €์žฅ ์œ ํ˜• ์ง€์ •์ž register

 

-๋ ˆ์ง€์Šคํ„ฐ(register)์— ๋ณ€์ˆ˜๋ฅผ ์ €์žฅํ•œ๋‹ค

register int i;
for(i = 0 ; i < 100 ; i++)
	sum += i;

 

- ๋ ˆ์ง€์Šคํ„ฐ๋ž€ CPU ์•ˆ์— ์†Œ๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ์ด๋‹ค.

- ๋ฉ”๋ชจ๋ฆฌ๊นŒ์ง€ ๊ฐ€์ง€ ์•Š์•„๋„ ๋ผ์„œ ์†๋„๊ฐ€ ๋น ๋ฅด๊ณ  ์„ฑ๋Šฅ์ด ์ข‹์•„์ง„๋‹ค.

- ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋ฉด ์ข‹๋‹ค.

 

 

 

 

volatile ์ง€์ •์ž

 

- ํ•˜๋“œ์›จ์–ด๊ฐ€ ์ˆ˜์‹œ๋กœ ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒฝ์šฐ์— ์‚ฌ์šฉ๋œ๋‹ค.

- ํ•˜๋“œ์›จ์–ด์™€ ์—ฐ๊ฒฐ๋œ ๋ณ€์ˆ˜

- ์ž„๋ฒ ๋””๋“œ ์‹œ์Šคํ…œ์— ์“ฐ์ธ๋‹ค.

volatile int io_port; //ํ•˜๋“œ์›จ์–ด์™€ ์—ฐ๊ฒฐ๋œ ๋ณ€์ˆ˜

void wait(void){
	io_port = 0;
	while (io_port != 255);
}