티스토리 뷰
변수의 본질은 메모리. 주 기억장치 메모리
가용한 메모리는
- 스택
- 힙
- 텍스트
- 데이터
영역의 메모리.
변수선언은 주로 지역변수를 의미, 지역변수는 위 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 메모리 상에는 모두 별도(고유) 이름이 있음. 주소가 없다
'Test > C' 카테고리의 다른 글
함수 응용2 : 재귀함수, 문자/문자열처리함수, 유틸리티함수 (0) | 2018.12.26 |
---|---|
함수 응용1 : 매개변수 전달방법, 스택 프레임 그리는 방법 (0) | 2018.12.26 |
메모리와 포인터6 : 다차원 배열에 대한 포인터 (0) | 2018.12.23 |
* 메모리와 포인터5 : 포인터의 배열과 다중 포인터 (0) | 2018.12.21 |
메모리와 포인터4 : 메모리 복사 (0) | 2018.12.20 |
- Total
- Today
- Yesterday
- dp-2
- 차집합
- virt-sysprep
- Join
- 스토리지
- powercli
- 3par
- 배열
- cloud-init
- 부동없이
- 중복제거
- vmware.powercli
- exadata
- vmware
- powershell
- dp-1
- LIST
- 변수화
- dezoomify
- artandculture
- 정렬
- storage
- fromkeys
- insert
- set()
- EXA
- 대소문자
- 읽어오기
- oracle
- sysprep
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |