…™업무일지。

[smart]이재우-20140324

엔지니어2 2014. 3. 24. 08:42
728x90

 

2014.03.24 수업 ver1_0a.docx

 

2014. 03. 24 수업 및 과제 


1 메모리 영역의 이해

  -메모리의 영역 5종류

 

 메모리 영역

 행위 영역

 기억 영역

 code 영역

 =Ro 영역

 =text 영역

 Data(전역변수)

 BSS(전역변수)

 Heap(동적할당)

 Stack(지역변수)

   

 

-메모리 영역의 설명

 메모리의 영역 5종류

 메모리 Name   메모리 생성  메모리 저장 형태

 Code(함수)

 =Ro 영역(Read only)

 =text 영역

 1.Compile Time(컴파일시 만들어지며 

   실행파일(*.exe)의 용량에 포함)

 1.상수값

 2.printf" "

 

 Data(전역변수)

 1.Compile Time(컴파일시 만들어지며 

   실행파일(*.exe)의 용량에 포함)

 2.프로 그램이 종료 할때 까지 남아 있음

 3.전역변수가 많으면 실행파일( *.exe) 용량이 늘어남 

 4.자주쓰는 메모리는 전역 변수를 쓰는 것이 유리

 1.전역변수 중 초기값

    입력 메모리

 BSS(전역변수)

 =Block startde  by Symbol

 =Zi영역

 

 1.자동 초기화 메모리 영역 

 2.Block startde by Symbol

 3.initialize(초기화)

 4.Zi(Zero initialize)영역

   (0값으로 초기화 된 영역)

 Heap(동적할당)

   

 Stack(지역변수)

 1.Rum Time 시 생성

 2.자주쓰는 메모리를 Stack(지역변수)로

정의시 생성과 삭제를 반복하는 시간이

늘어 나므로 속도가 느려 짐 

 1.지역변수

 2.point 주소 저장

 3.배열의 상수 값 

 

 

 [예제]

#include <stdio.h>
void Add(int iVal); // iVal 지역 변수임
int iNum;  // 전역변수는 기본 0으로 초기화됨
int iNum1=10// 초기화 값을 준 것은 메모리 Data 
int iNum2;
int iNum3=30;
int iNum4;
int iNum5=50;
int iNum6;
int iNum7=70;

int main()
{
  printf("iNum:%d \n", iNum); // 전역변수 0으로 초기화
  Add(3);            //
  printf("iNum:%d \n", iNum);
  iNum++;
  printf("iNum:%d \n", iNum);
  printf("&iNum       :%08X \n"&iNum);
  printf("초기화&iNum1:%08X \n"&iNum1);
  printf("&iNum2      :%08X \n"&iNum2);
  printf("초기화&iNum3:%08X \n"&iNum3);
  printf("&iNum4      :%08X \n"&iNum4);
  printf("초기화&iNum5:%08X \n"&iNum5);
  printf("&iNum6      :%08X \n"&iNum6);
  printf("초기화&iNum7:%08X \n"&iNum7);
  printf("---------------\n");
  printf("&main :%08X \n"&main);
  printf("&Add  :%08X \n"&Add);
  printf("&printf:%08X \n"&printf);
  printf("문자 주소 :%08X \n""Hello");
  return 0;
}
void Add(int iVal)
{
  iNum=iNum+iVal;  
  printf("&iVal:%08X \n"&iVal);

[결과]

 


 

2 Static 변수 

-전역변수의 성격을 지니는 변수 

-(지역변수 특성)선언된 함수 내에서만 접근이 가능.

-(전역변수 특성)딱 1회 초기화되고 프로그램 종료 시까지 메모리 공간에 존재

   

3 register 변수 

-CPU 내에 존재하는 메모리

-연산속도가 빠르다.

-전역변수에는 register 변수를 선언 할 수 없다.

-선언을 힌트를 주는 것임:컴파일러가 합당하지 않다고 판단하면 레지스터에 할당 하지 않음

 

4 재귀 함수 

-CPU 내에 존재하는 메모리

-연산속도가 빠르다.

-전역변수에는 register 변수를 선언 할 수 없다.

-선언을 힌트를 주는 것임:컴파일러가 합당하지 않다고 판단하면 레지스터에 할당 하지 않음

 

 

5 배열 

 

[예제]

#include <stdio.h>
int main()
{
/*

  int iNum1
=1;
  int iNum2
=2;
  int iNum3
=3;
  int iNum4
=4;
  int iNum5
=5;
  int iNum6
=6;
  int iNum7
=7;
  int iNum8
=8;
  int iNum9
=9;
  printf("%d\n", iNum1);
  printf("%d\n", iNum2);
  printf("%d\n", iNum3);
  printf("%d\n", iNum4);
  printf("%d\n", iNum5);
  printf("%d\n", iNum6);
  printf("%d\n", iNum7);
  printf("%d\n", iNum8);
  printf("%d\n", iNum9);
*/

  int iNum[9];     //
배열 선언으로 간단히 코딩
  int iCnt;
  for(iCnt=09>iCnt ; ++iCnt)
    iNum[iCnt]=iCnt;
  
  for(iCnt=09>iCnt ; ++iCnt)
    printf("%d\n", iNum[iCnt]);
  return 0;
}