기억클래스

프로그램 내에서 유효범위, 생존기간, 메모리에서의 위치, 변수의 성격을 결정하는 프로그램 요소이다. 대표적으로 auto(로컬변수-생존기간은 해당 함수 끝날때까지. 메모리에서는 stack영역), extern(글로벌 변수-생존기간은 프로그램이 시작될때 생성되어 끝날때 사라짐. 메모리에서는 data영역)

즉 우리가 main내부나 함수 내부에서 변수를 생성시 auto 가 자동으로 붙는것이고 외부에서 전역으로 생성시 extern이라는 표기가 자동으로 넣어지는것이다.

예제를 보면 auto로 할시 그결과가 없는것과 동일함을 확인할 수 있다.

메모리 영역

text영역

실행코드string 영역. 컴파일될때 크기가 결정된다.

data영역

extern,static,초기화 된것

bss영역

extern,static 초기화 안된것

heap 영역

동적 할당. 밑에서부터 공간이 할당된다. 이역시 프로그램을 실행시켜야 공간을 알 수 있다.

stack 영역

변수 할당. 런타임시 크기가 할당됨. 위에서부타가 아닌 밑에서 부터 체워진다.

그 이유는 stack 영역은 얼머나 공간이 할당될지 모르기 때문이다.

즉 함수의 변수를 auto로 할시 블록 단위로 살기에 call시 생기고 call이 끝나면 죽는다.

컴파일과 런타임

컴파일은 소스코드를 연결하는 과정으로 컴파일 오류는 문법적 오류라 할 수 있다.

런타임 오류는 실행중 발생하는 오류로 프로그램을 수행할수 없을때 발생한다.

본인은 보통 0으로나누거나 , 없는 메모리에 접근할때 발생가하곤 한다.

전역변수와 지역변수

전역변수를 함수에서 사용하니 잘됨을 확인할 수 있었다. 예제를 보면 전역변수가 선언된후 동일 이름의 지역변수가 선언되니 전역변수가 아닌 지역변수가 사용됨을 알 수 있다.

'언어 > c' 카테고리의 다른 글

printf로 ""(큰따옴표), ''(작은따옴표) 출력하기  (0) 2018.02.16
구조체  (0) 2018.02.08
(c)트러블슈팅-Floating point exception (core dumped)  (0) 2018.02.07
동적 메모리 할당  (0) 2018.02.01
배열  (0) 2018.02.01

+ Recent posts