본문 바로가기

2014 C/3월

2014.03.24


Code

함수

Data

전역변수

Bss

heap

동적할당

stack

지역변수

->배경색 있는 메모리는 Save파일이 따로 있다. 

하드드라이브(HDD)에 메모리를 옮겨놓은 후 다시 실행파일에 복사해준다.


될 수 있으면 코드를 짧게 짜야한다.(최적화) 용량을 줄이기 위해...

(함수와 전역변수는 될 수 있으면 최적화 시켜야한다.)

지역변수도 계속해서 쓰일 경우 메모리를 삭제했다,생성했다를 반복하는 것 보다는 전역변수로 선언하는 것이 더 좋다.


Code에는 함수메모리도 있지만 상수메모리도 저장된다.

Code에 어떤 행위에 대한 명령이 있고 밑에는 그 결과를 나오게하는 변수가 있다.

BSS영역은 BSS영역에 무슨 메모리가 오든 0으로 채운다. BSS는 0으로 채워져있다.



지역변수 : Run Time (실행 중에 생성된다.)

전역변수 : compile Time (컴파일 중에 생성된다.)

-> 전역변수를 많이 만들변 용량이 많이 든다.

-> 전역변수는 컴파일시 초기화 되어 나온다!


운영체제에 맞는 로더가 메모리를 복사해준다.





val는 지역변수이기 때문에 선언된 함수안에서 밖에 쓸 수 없어서 36번째줄 Add의 함수안에서 출력하였다.

30번째줄에서 알 수 있는 것은 '' 안에 들어간 것은 상수 라는것이다.

주소를 출력했을때 보면 지역변수 val과 전역변수+함수의 주소값은 매우 크게 떨어져 있다는 것을 알 수 있다.

그에 반해 함수주소와 전역변수의 주소는 얼마 떨어지지 않고 가까기에 위치해있다.

메모리의 5등분을 보면

함수를 저장하는 code와 전역변수를 저장하는 Data + Bss가 바로 근접해있기 때문에



이 코드를 봤을때 지역변수와 전역변수의 이름은 겹쳐도 실행이 된다는 것을 알 수 있다!

실제로 전역변수와 지역변수의 네임은 겹쳐도 실행이 된다.

다만 전역변수가 같은 이름이 선언된 함수의 안에 들어올 시에 무시되고 지역변수가 실행된다.





코드를 보면 static이 붙은 지역변수의 주소값이 전역변수의 주소 값으로 설정된 것을 알 수 있다.

그렇다면 스태틱변수는 컴파일시에 만들어 진다는 것을 알 수 있고 스태틱이 선언되지 않은 변수는 런타임시에 만들어 진다는 것을 알 수있다.


그렇다면 static은 전역변수와 성질이 비슷한 것을 알 수있다. 전역변수의 특징을 그대로 가지고있다.

-> 하지만 모든 함수의 안에서 쓸 수 없고 선언된 함수의 안에서만 사용할 수 있다.







출력된 결과를 확인하면 static변수로 선언된 값들은 계속해서 증가가 되고있는데 그냥 지역변수로 선언된 변수는

계속해서 초기화 되고 있다.

이를 통해서 static변수는 선언된 함수안에서 쓸 수 있는 것을 제외한다면 전역변수와 똑같은 특성임을 알 수 있다.

메모리값이 함수가 종료되어도 저장되는 것이다.


'2014 C > 3월' 카테고리의 다른 글

2014.03.25  (0) 2014.03.25
2014.03.24  (0) 2014.03.24
2014.03.21  (0) 2014.03.21
2014.03.20  (0) 2014.03.20
2014.03.19  (0) 2014.03.19