1. 변수와 메모리 저장위치
실행파일 실행 -> 프로세스 할당
프로세스[ 스택 세그먼트 | 힙 세그먼트 | 데이터 세그먼트 | 코드 세그먼트 ]
스택 세그먼트 -> 지역변수 할당, 임시데이터 저장
- 재활용 되는 공간
- 지역변수의 소멸과 생성 반복
- 변수가 할당된 영역은 0을 보장받지 못한다.
- 재활용 공간이므로 어떤 이전 값이 남아있을지 모른다.
힙 세그먼트 -> 동적 메모리 할당 영역
데이터 세그먼트 -> 전역변수와 정적변수 할당
- 한번 할당되면 프로세스 종료까지 소멸되지 않음
- 변수는 프로그램 종료까지 값 유지 가능
- 변수 할당 영역은 0부터 시작함 ???전역변수 출력 =0???
코드 세그먼트 -> 프로그램의 실행코드(즉, 함수할당)
(범위)=(가시성)=변수사용가능영역
(생존시간)=변수가 메모리에 얼마나 오래 남아있는지
지역변수, 전역변수, 정적변수에 따라 범위와 생존시간이 달라짐 ???how???
2. 지역변수
- 지역변수는 함수내에서만 생존 -> 타 함수 접근 불가
- 타 함수에서 동일명 변수 사용가능 -> 실체는 다르다
- 실체는 자식함수에서 부모함수의 실인수의 주소를 매개변수로 받아야 사용가능
- 블록 내에서 선언시 블록 내에서만 사용가능 ???블록내 변수와 밖 함수가 이름 같아도 문법오류x???
3. 전역변수
- 프로그램 전반에 걸쳐 유효하다.(프로그램 종료시까지 소멸되지 않음)
- 하나의 변수를 모든 함수가 공유 가능하다.
- 전역변수명과 지역변수명이 같을 수 있으나 저장되는 영역이 다름
!!!하지만 다르게 작성하는것이 가독성면에서 좋다!!!
4. 접근 수정자
변수 저장 위치에 영향을 주는 형수정자[ extern | static | auto | register ]
- auto : B언어와 호환성을 갖기 위해 제공되는 기능(현재는 거의 사용하지 않음)
- register : 변수를 메모리가 아닌 CPU내의 레지스터에 저장함, 그러나 변수의 개수가 제한적임
-> 과거에는 2개로 제한했지만 현재 개수는 옵티마이저(optimizer)에 의해 결정됨 ???옵티마이저???
- static : 정적변수를 선언할 때 사용
└ 타함수에서 사용 불가지만 프로그램 내내 존재한다, 동일함수 반복 호출시 마지막 값 지속적 사용 가능
- extern : 다른 파일에서 선언된 전역변수를 현재파일에서 사용할 수 있도록 할 때 사용
'Programing > C' 카테고리의 다른 글
C :: 백준 1009번 - 분산처리 (0) | 2017.06.09 |
---|---|
C :: 파일 입력 및 정렬된 숫자 출력 (0) | 2017.05.09 |
C :: 포맷스트링 연습 (0) | 2017.04.25 |
C :: 수업 내용정리 (0) | 2017.04.25 |
C :: 구조체로 모래시계와 나비모양 출력하기 (0) | 2017.04.15 |