본문으로 바로가기

C :: 기억 클래스

category Programing/C 2017. 5. 9. 13:44

1. 변수와 메모리 저장위치


실행파일 실행 -> 프로세스 할당


프로세스[ 스택 세그먼트 | 힙 세그먼트 | 데이터 세그먼트 | 코드 세그먼트 ]


스택 세그먼트    -> 지역변수 할당, 임시데이터 저장

- 재활용 되는 공간

- 지역변수의 소멸과 생성 반복

- 변수가 할당된 영역은 0을 보장받지 못한다.

- 재활용 공간이므로 어떤 이전 값이 남아있을지 모른다.

힙 세그먼트       -> 동적 메모리 할당 영역

데이터 세그먼트 -> 전역변수와 정적변수 할당

- 한번 할당되면 프로세스 종료까지 소멸되지 않음

- 변수는 프로그램 종료까지 값 유지 가능

- 변수 할당 영역은 0부터 시작함 ???전역변수 출력 =0???

코드 세그먼트    -> 프로그램의 실행코드(즉, 함수할당)


(범위)=(가시성)=변수사용가능영역

(생존시간)=변수가 메모리에 얼마나 오래 남아있는지


지역변수, 전역변수, 정적변수에 따라 범위와 생존시간이 달라짐 ???how???


2. 지역변수


- 지역변수는 함수내에서만 생존 -> 타 함수 접근 불가

- 타 함수에서 동일명 변수 사용가능 -> 실체는 다르다

- 실체는 자식함수에서 부모함수의 실인수의 주소를 매개변수로 받아야 사용가능

- 블록 내에서 선언시 블록 내에서만 사용가능 ???블록내 변수와 밖 함수가 이름 같아도 문법오류x???


3. 전역변수


- 프로그램 전반에 걸쳐 유효하다.(프로그램 종료시까지 소멸되지 않음)

- 하나의 변수를 모든 함수가 공유 가능하다.

- 전역변수명과 지역변수명이 같을 수 있으나 저장되는 영역이 다름

!!!하지만 다르게 작성하는것이 가독성면에서 좋다!!!


4. 접근 수정자


변수 저장 위치에 영향을 주는 형수정자[ extern | static | auto | register ]


- auto : B언어와 호환성을 갖기 위해 제공되는 기능(현재는 거의 사용하지 않음)

- register : 변수를 메모리가 아닌 CPU내의 레지스터에 저장함, 그러나 변수의 개수가 제한적임

-> 과거에는 2개로 제한했지만 현재 개수는 옵티마이저(optimizer)에 의해 결정됨 ???옵티마이저???

- static : 정적변수를 선언할 때 사용

└ 타함수에서 사용 불가지만 프로그램 내내 존재한다, 동일함수 반복 호출시 마지막 값 지속적 사용 가능

- extern : 다른 파일에서 선언된 전역변수를 현재파일에서 사용할 수 있도록 할 때 사용