본문 바로가기
코스웨어/10년 스마트폰BSP

[BSP]-업무일지-임종현-20100610

by 알 수 없는 사용자 2010. 6. 10.
728x90
반응형

오전.
함수오버로딩-(p.360)


overloading 은 여러함수들이 동일한 이름을 사용할수 있는 기능이다.

인자의type은 같아도 인자만 다르거나 인자만 바꾸어 사용할수 있다는것.


오버로딩의 예제.


-동적메모리할당.



-static 전역변수나 static지역변수가 할당되는 공간이다.


-heap은 동적으로 메모리를 할당하는 공간.







-stack은 함수내 지역변수들이 저장되는 공간이다. 



동적메모리 할당은 컴퓨터로 부터 메모리를 얻어 오는것을 이야기 한다.
프로그램이 실행되는 도중 메모리의크기에 따라 할당용량이 결정되고 할당하게되고
메모리를 해제하는 시점을 자유로이 조절할수도 있다.

예제)
-------------------------------------------------
#include <iostream>
using std::cin;
using std::cout;
using std::endl;

int* func(int num)
{
 ar[100];
 int*arrA = new int[num];
 return (arrA);
}
int main(void)
{
 int size;
 cout<<"할당하고자 하는 배열의 크기" ;
 cin>>size;

 int *arr = new int[size];
 
 for(int i = 0;i<size; i++)
 { 
 arr[i] = i + 10;
 }
 for(int j = 0; j<size; j++)
 {
 cout<<"arr["<<j<<"] = "<<arr[j]<<"\n";
 }
 delete arr;
 return 0;
}

<-- 결과





-------------------------------------------------
*정적 메모리할당은 동적메모리할당과 다르게 변수를 정의할때 먼저크기를 정하여 프로그램을 실핼한다.
그래서 메모리가 모자라거나 아니면 메모리를 낭비할수도 있다. 함수의실행이 끝나면 자동적으로
메모리가 해제되고 변수도 소멸된다.

-동적 메모리를 할당하는 연산자
new[], delete[]를 사용하여 배열을 동적으로 할당할수 있다.
new[]를 사용해 메모리 공간을 할당 하게 되면 사용이 끝나는 시점에
메모리를 해제 해줘야 하는데 그연산자가 바로 delete[]다.
new[], delete[]와 비슷하게 new, delete 가 있는데 이연산자는
변수 하나를 동적으로 할당하는것이다.
동적메모리 할당을 실패할경우 null값을 가지게 되는데
그렇게 될경우를 대비해 예외 처리를 해줘야 한다.

-동적 메모리할당에 관련된  기본적인규칙

new[]와 new는 전혀 다른 연산자이다. delete[]와 delete도 마찮가지다. new로 할당한 메모리를 delete[]로해제하려 하면 문제가 생긴다. 할당한 메모리를 일부분만 해제하는 일이 생기게되고  반대로 new[]로 할당한 메모리를 delete로 해제하려 하면 있지도 않은 배열을 해제하려하기 때문에 문자가 생기게 된다.

malloc.
c++에서는 new[], delete[]연산자로 동적 메모리를 할당하는데 c에서는 malloc 함수를 쓴다. 해제는 free.
c의 malloc과 c++ new는 같은 역활을 한다.





















오후
-문자배열
문자열은 const int * 이다.











malloc은 위에 설명했기에 pass.

 auto (자동변수)

    - 일반적인 변수 형태로 블럭 안에서만 유효하며 블럭의 실행이 끝나면 소멸

    - 스택(Stack)에 메모리 할당

    - auto 키워드는 생략할 수 있음.  즉 아무 표시가 없으면 자동변수가 됨

 

 static (정적변수)

    - 블럭 안에서만 유효한 값을 가지지만 자동변수와 같이 없어지지 않고 블럭으로 다시

      돌아왔을 때 이전 값을 다시 이용 가능

    - 초기화를 생략하면 0으로 자동 초기화

    - 힙(Heap)에 메모리 할당

    - 선언된 위치에 따라 다음과 같이 구분됨

        . 내부정적변수 : 함수 내부에서 선언되며, 함수 내부에서만 사용이 가능. 하지만,

                                       프로그램이 실행되는 동안 존재

        . 외부정적변수 : 함수 외부에서 선언되며, 다른 소스파일에서는 참조할 수 없음


-strlen 함수-
-입력한 문자열의 길이 출력.



"test" 출력하면 문자열의 길이인 4가 출력이 된다.

strlen 이란 함수는 문자열의 길이를 return
해주는 함수이다. (stirng length)
계산을 할때 null문자 이전까지의 길이만 계산한다.













-문자열이 저장된 메모리의 주소값 출력

 

이건 별다른 설명이 필요 없을듯..
(참고 p.226)









위예제는  main, printf, abc, malloc,p 의 주소값을 추가 해서 출력 한것이다.
main 과 printf에 '&'를 붙여서 출력 하거나 '&'를 붙이지 않고 출력 해도 같은 주소같이 나온다.
이유는 main 과 printf에는 각각의 주소값이 있기때문에 '&'상관 없이 같은 값이 출력이 되는것이다.
 
-문자열에서 메모리에 저장되는 위치
위에서도 얘기했지만 다시한번..
-static 전역변수나 static지역변수가 할당되는 공간이다.

-heap은 동적으로 메모리를 할당하는
 공간.

-stack은 함수내 지역변수들이 저장되는 공간이다. 

*전역변수?
-함수의 외부에 선언되는 변수
-전역변수는 데이터 영역의
  메모리 공간에 선언.
-프로그램 전체에서 변수 사용 가능.
-프로그램이 종료될 때까지 값이
사라지지 않음.
-초기값은 0으로 지정(VisuaStudio에서만)

**
Uninitialized Data : 초기화 안된 전역변수가 저장되는 곳이며 프로그램이 실행되기 전에 0으로 초기화 된다. BBS라 불린다.

Stack :  스택은 지역변수가 저장되는 메모리가 동작하는 방식이다.


728x90