본문 바로가기
코스웨어/14년 스마트컨트롤러

2014년 3월 24일 서상우 업무일지[출석번호 13번]

by 알 수 없는 사용자 2014. 3. 24.
728x90
반응형

전역변수의 이해와 선언방법

지역변수는 다른 함수의 값을 공유 못한다는 단점이 있다

전역변수는 함수간에 공통으로 변수사용이 가능하다

전역변수 변수를 함수 바깥에 생성한다

지역변수: 실행중간에 만들어진다. (Run Time)

전역변수: 컴파일중간에 만들어진다.(compile time


(전역변수생성)


(메모리 5등분)

함수및 변수 저장장소

지역변수와 함수 저장위치는 멀지만 함수와  전역변수의 위치는 가까움

실행파일(*.EXE)에는 Code(함수), Data(전역변수), Bss(전역변수)가 저장돼 있다.

그래서 전역변수를 많이 지정하면 용량 커진다.


(함수,및 변수의 주소값)

함수주소는 전역변수주소보다 상위에 위치한다.

초기화를 시켜준 전역변수는 안시켜준 전역변수보다 상위에 위치한다.


(※)  

Code영역에는 함수와 상수가 들어간다.

Data영역에 초기화 시킨 변수가 들어간다

BSS영역에 초기화 시키지 않은 변수가 들어간다.

로더가 Code(함수), Data(전역변수), Bss(전역변수)를 읽고

main을 진입점으로 지역변수를 생성 한다.  

자주쓰는 함수 가 있다면 전역변수를 생성해줌으로서 속도가 빨라진다. 

Black Started by Symbol(BSS) 인베이디드에서는 "Zi"라고부름

Code영역은 기계어로 돼있다. 인베이디드에선 "Ro"라 부르고 Text 라고도 부른다. 

메모리는 행위(CU)를 나타내는 영역Code 와 기억(레지스터)을 나타내는 영역(나머지 4개의 영역)으로 나뉜다.


static 지역변수 (전역속성의 지역변수 만드는 방법)

(지역변수 우선)

전역변수와 지역변수의 이름이 겹치면 우선적으로 지역변수가 우선이다. 


(static함수의 주소)   

짝수 iNum을 static지역함수로 바꾸면 함수주소가 지역함수 처럼 상위로 올라간다.

BSS가아닌 Data에 저장되어 컴파일 할때 이미 존재하는 변수가 된다. 

함수의 실행이 끝나면 지역변수는 지워 지지만 static지역변수는 지워지지 않는다. 

 


재귀함수(함수 내에서 자기 자기 자신을 다시 호출하는함수)

재귀함수는 잘못사용하면 메모리 과도하게 사용

코드를 간단히 하기위해서 쓰지만 잘쓰면 중간 못쓰면 독!!



배열(Array)

배열을 사용하면 그 수에 상관없이 한번에 많은 수의 변수를 선언할수 있다.

int iNum[4]; 4바이트(int) 4개가 생긴다


(배열사용)

(6~14열) 변수 직접선언

(27~28열)배열을 이용한 선언

(16~24열)직접 출력

(30~38열)포문을 이용한 출력



728x90