Today I Learned(TIL) 21.07.26

미네·2021년 8월 3일
0

TIL

목록 보기
5/21
post-thumbnail

오늘 공부한 것

오늘 배운 것

  • 16진수(Hexadecimal)
    • 0x를 붙혀 뒤에오는 문자들이 16진수임을 알려준다.

  • 메모리 주소
    • int 타입은 컴퓨터 메모리 어딘가 4바이트만큼의 자리를 차지함.
      #include <stdio.h>
      
      int main(void)
      {
         int n = 50;
         printf("%p\n", &n); // 메모리상 주소를 받기위해 '&'라는 연산자를 사용
         printf("%p\n", *&n); // '*'를 사용하면 그 메모리 주소에 있는 실제값을 받음
      }
  • 포인터
    #include <stdio.h>
    
    int main(void)
    {
      int n = 50;
      int *p = &n; // *p라는 포인터 변수에 &n(변수 n의 주소)를 저장
      printf("%p\n", p); // 변수 n의 주소를 출력
      printf("%i\n", *p); // 포인터 p가 가리키는 변수의 값 = n의 값 = 50
    }
  • 문자열
    • 실제로 c에는 string이라는 자료형이 없다.
    • 문자열은 문자의 배열이다.
      #include <stdio.h>
      
      int main(void)
      {
         char *s = "EMMA";
         printf("%p\n", s); // E에 해당하는 메모리주소를 출력
         // 첫번째문자에 해당하는 주소값을 하나씩 증가하면 바로 옆에있는 문자의 값을 출력함
         printf("%c\n", *s); // E
         printf("%c\n", *(s+1)); // M
         printf("%c\n", *(s+2)); // M
         printf("%c\n", *(s+3)); // A
      }
  • 메모리 할당 함수 malloc
    • 정해진 크기만큼 메모리를 할당하는 함수
  • 메모리 해제 함수 free
    • 메모리를 해제하지 않으면 메모리에 저장한 값은 쓰레기값으로 남게되어 메모리 용량의 낭비가 발생하게 된다. = 메모리 누수
  • 메모리
    • 메모리 안에는 데이터가 저장되는 구역이 나뉘어져 있다.
    • 머신코드 영역 : 프로그램이 실행 될 때 그 프로그램이 컴파일 된 바이너리가 저장.
    • 글로벌 영역 : 프로그램 안에서 저장된 전역 변수가 저장.
    • 힙 영역 : malloc으로 할당된 메모리의 데이터가 저장.
    • 스택 영역 : 프로그램 내의 함수와 관련된 것들이 저장.
  • 힙 영역에서는 malloc에 의해 메모리가 더 할당될수록, 점점 사용하는 메모리의 범위가 아래로 늘어나고, 스택영역에서도 함수가 더 많이 호출될수록 사용하는 메모리의 범위가 위로 늘어난다.
    점점 늘어나다가 제한된 메모리 용량에서 기존의 값을 침범하는 상황이 발생할 수 있는데,
    이것를 힙 오버플로우 또는 스택 오버플로우라고 한다.

내일 할 일

0개의 댓글