ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • NAVER 부스트코스 CS50 - 5. 메모리
    공부일기/CS50 2020. 8. 17. 17:27

    5 메모리

     

    5-1 메모리 주소

    컴퓨터 과학에서는 숫자를 10진수나 2진수 대신 16진수로 표현하는 경우가 많다.  데이터를 

    처리 장점이 있기 때문인데, 0 1 2 3 4 5 6 7 8 9 a b c d e f 순서로 표현한다. 

    16진수를 표현 모든 앞에 0x 붙인다. C에서는 변수의 메모리상 주소를 받기 위해 ‘&’ 

    연산자를 사용할 있다. 반대로 ‘*’ 사용하면 메모리 주소에 있는 실제 값을 얻을 있다.

     

     

    5-2 포인터

    * 연산자는 메모리 주소에 있는 값을 받아올 있게 하는데 이를 이용해 포인터 역할을 하는 

    변수를 선언할 있다.  

    여기서 *p 포인터 변수이다. 포인터 변수에 n 주소를 받게 되고 int 포인터가 가리키는 

    값이 int라는 뜻이다. 

     

     

    5-3 문자열

    문자열의 마지막 부분은 \0 인데, 문자열의 끝을 표시하는 약속이다. 

    위의 함수에서 *s 포인터 변수, char * 포인터가 가리키는 값이 char 자료형 이라는 . 

    printf 함수가 \0 지의 값을 읽으며 문자열을 있다.

     

     

    5-4 문자열 비교

    문자열을 비교할 문자열이 저장된 변수를 바로 비교하게 되면 해당 변수가 저장 있는 

    주소가 다르기 때문에 다르다는 결과가 나온다. 정확한 비교를 하기 위해서는 실제 문자열이 

    저장돼 있는 곳으로 이동해 문자를 하나씩 비교해야 한다.

    코드로 나타내보면 이렇게 된다. 

     

     

    5-5 문자열 복사

    malloc() : 메모리 할당 함수, 인자로 받는 것은 할당 받을 메모리 크기. 문자열의 길이 +1 만큼 

    메모리를 할당하고 루프를 돌면서 문자를 복사해야 한다.

     

     

    5-6 메모리의 할당과 해제

    free() malloc()으로 할당받은 메모리를 해제해 준다. 메모리 관리를 위해서 필수적으로 해야

    한다.

    valgrind : 버그를 찾는 도구

    버퍼오버플로우: 메모리나 메모리 배열을 다룰 , 공간을 넘어 접근하는 경우

     

     

    5-7 메모리 교환, 스택,

    메모리 안에는 데이터 저장되는 구역이 나눠져 있다. 머신 코드 영역에는 프로그램이 실행될  

    프로그램이 컴파일 바이너리가 저장된다. 글로벌 영역 프로그램 안에서 저장된 

    전역변수가 저장된다. 영역에는 malloc으로 할당 메모리의 데이터가 저장되며 밑으로

    쌓이게 된다. 그리고 스택에는 프로그램 내의 함수와 관련된 것들이 저장된다. 

     

    5-8 파일 쓰기

    5-9 파일 읽기

     

    // 전화번호부 파일을 만드는 방법과 읽으려는 파일이 jpeg형식인지 아닌지를 판별할 있는 프로그램들을 만들었다. 이번 메모리 부분은 포인터개념이 어려웠고, 퀴즈나 미션들은 해내긴 했지만 꽤나 많은 생각을 요구했다. 메모리가 어떤 구조로 데이터가 저장되고, 사용되는지에 대해 이해하는 데서 만족하려 한다.

Designed by Tistory.