티스토리 뷰

변수의 본질은 메모리. 주 기억장치 메모리


가용한 메모리는

- 스택

- 힙

- 텍스트

- 데이터

영역의 메모리.


변수선언은 주로 지역변수를 의미, 지역변수는 위 4가지 중 스택 영역

스택 구조의 메모리는 자동 관리되므로 스택을 사용하는 변수를 '자동변수'라 부름


---------------------------------------------------------------------------


컴파일러가 알아서 처리했으므로 변수 선언으로 확보하는 메모리 종류는 별도 언급 없었음.

메모리 종류는 영어로 storage-class ( 기 억 부 류 , 기 억 류 )


변수를 선언할 때 자료형 앞에 명시하는 예약어를  storage-class specifier (기 억 부 류  지 정 자)

- extern , 외부

- auto , 자동  - 선언 없으면 auto

- static , 정적

- register , 레지스터  - cpu가 가진 메모리

ex)

#include <stdio.h> 
#include <stdlib.h>
#include <string.h>


int main(void)
{
 auto char astrList[3][12] = { "철수", "길동", "영희" };

 PrintUser(astrList);


 return 0;
}

--------------------------------------------------------------------------------------------


* 정적변수 static


ex)

#include <stdio.h> 
#include <stdlib.h>
#include <string.h>


void TestFunc(void)
{
 int nData = 10;
 printf("%d\n", nData++);

}


int main(void)
{
 TestFunc();
 TestFunc();
 TestFunc();

 return 0;
}

------------------------

10

10

10


ex)

#include <stdio.h> 
#include <stdlib.h>
#include <string.h>


void TestFunc(void)
{
 static int nData = 10;            // 정적변수  --> 전역변수와 달리 독립된 두 함수간 논리적으로 연결하여 불필요한 의존성을 만들지는 않는다

 printf("%d\n", nData++);       // 전역변수나 정적변수 모두 동시성을 지원하기 어렵다. 멀티쓰레드 환경인 요즘, 성능과 직결.

}                                         // 사용엔 신중을 기해야 한다.


int main(void)
{
 TestFunc();
 TestFunc();
 TestFunc();

 return 0;
}

------------------------

10

11

12


* 동시성 문제

1. TV보기

2. 라면먹기

--> 동시성 있음

3. 외출

--> 2,3 간에는 동시성 없음


* 쓰레드간 전역변수 또는 정적변수를 이용하면서 충돌할 가능성 있음    --> TLS (ThreadLocalStorage) 옵션이 생김


* 레지스터 변수 register

- 임베디드 운영체제나 H/W를 위한 프로그램을 제작하는 경우가 아니면 크게 따질 필요가 없다

- 다만 문법상 주의할 것 하나.


ex)

#include <stdio.h> 


int main(void)
{
 register int i = 0;
 printf("%d\n", i);
 printf("%p\n", &i);


 return 0;
}

--------------------

error C2103: 레지스터 변수에 '&'이(가) 있습니다.

---> register 메모리 상에는 모두 별도(고유) 이름이 있음. 주소가 없다












댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/08   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
글 보관함