C++

Clear·2023년 11월 15일
0

부동 소수점

실수 표현시 소수점 위치를 고정하지 않는 것 범위가 한정적인 고정 소수점에 비해 범위가 넓음.

  • Bit State 표현

2 진법

부호부 / 정수부 / 소수부

정규화

부호부 음수 1 , 양수 0
지수부 바이어스 표현법 사용
가수부 왼쪽부터 채운 옮긴 뒤 0으로 채움

바이어스 표현법

지수의 음양 표현이 정수의 음양표현 의미와 다르기 때문에 사용
지수가 0 이라면 2^0 = 1 로 1이 기본값이 되는 현상을 피하기 위하여 사용한다.

지수부가 모두 0 인 경우

정수부를 0 으로 지수를 -126 으로 표현 모든 비트가 0 이라면 0

지수부가 모두 1인 경우

가수부가 모두 0 인경우 INF
가수부가 하나라도 1인 경우 NaN

실제 지수 범위 -126 ~ 127

부동 소수점 오차

구조상 가수부 크기가 일정하기 때문에 지수가 가수부의 크기보다 커진다면 오차가 발생한다.

문자열

문자들이 모여져 있는 집합

  • C++ 표준 라이브러이에서 string 클래스 자료구조 제공.
  • NULL 종료 문자열로 문자열 끝을 판별 할 수 있음.

참조자

Copy Pointer 를 의미한다.

  • 참조 연산자로 초기화시 주소 연산자 생략
  • 직접 접근시 간접 연산자 생략
  • 포인터 영역 마련후 초기화 되는 변수 주소가 포인터 영역에 써지게 되는 방식
    참조 객체의 메모리 공간 확부 및 주소 복사 포인터

타입 추론형

컴파일 타임에 초기화 된 값을 토대로 타입을 추론하여 적절한 타입으로 변경하는 자료형

  • 선언 즉시 초기화
  • 참조 타입 사용시 키워드 앞 참조 연산자 작성

전처리 지시문

  • #define
  • #include
  • #pragma once
  • #if , #ifdef, #ifndef

가상 메모리

  • 메모리 영역이 프로세스에게 독립적으로 부여
  • 타 프로세스 해당 메모리 영역 침범 불가
  • 메모리 부여시 운영체제, 프로세스가 절반씩 사용

malloc & free , new & delete

  • malloc
    • size 를 인자로 받음.
    • 할당한 주소 void * 반환
    • stdlib.h 필요
    • 할당 가능한 영역 없을시 nullptr 반환
  • new
    • 요소 개수를 받음
    • 생성자 호출 가능
    • 인자로 받은 타입으로 할당한 주소 반환
    • 할당 가능한 영역 없을시 std::bad_alloc 예외 발생
  • free
    • 주소를 인자로 받음
  • delete
    • 변수명을 인자로 받으며 배열 해제시 [] 작성
    • 인자로 받은 타입 확인 후 소멸자 호출

동적할당 공간 메모리 해제

  • malloc 과 new 요청
    힙관리자가 할당받은 메모리 분배후 부여받은 주소 , size 를 할당 내역에 기록

  • free , delete 요청
    할당 내역에 기록해 놓은 주소와 size 토대로 검사후 메모리 회수

힙관리자 : 힙 영역 관리, 프로세스 시작시 OS 에서 가상 메모리를 할당 받음

delete[]

  • 동적 배열 할당 요청
    내부에서 malloc 호출 시 인덱스 요소 개수를 저장할 추가로 메모리를 할당 받음.
    반환시 인덱스 0 번째 주소를 반환하기 위해 추가받은 메모리 크기를 더한 주소를 받음.

  • 해제
    힙 관리자의 할당 내역을 통하여 추가로 받은 메모리 크기를 뺀 후 인덱스 요소 개수 파악
    요소 개수만큼 소멸자 호출

선언 · 정의

  • 정의
    메모리 공간 확보
  • 선언
    해당 메모리 공간이 있다는 것을 알림

암시적 생성자 , 소멸자

컴파일러가 필요할 시 생성자와 소멸자가 명시되지 않았을 때 제공하는 생성자 · 소멸자

  • 명시되지 않은 모든 생성자 · 소멸자에 대하여 제공시
    • 불필요한 Code 영역 차지
    • 객체 생성 , 소멸시 생성자와 소멸자를 확인하는 오버헤드 발생

포인터

메모리의 주소를 가리키는 객체로 간접 접근을 통한
메모리 낭비와 지역성이 다른 메모리에 접근이 가능하다.

  • 주소와 타입 정보를 가짐.
  • 메모리 주소에 타입 정보를 기반으로 접근.
  • 원천 타입이 아닐 경우 혼란 발생

구조체 · 클래스

구조체 public 와 클래스 private 는 객체 지향 프로그램의 도입과 기존 라이브러리의 호환성을 보존하기 위해 나누어져 있다.

메모리 배치 규칙

맴버 변수는 변수 타입의 크기 배수 일 때 CPU 의 메모리 접근 횟수가 최소화됨.
배치시 /Zp8 기준 변수의 타입 크기와 8중 더 작은 쪽이 최소배수.

클래스 암시적 정의 메소드

기본 생성자 , 기본 소멸자 , 복사생성자 , 복사 대입 연산자 , 이동생성자 , 이동 대입 연산자

복사생성자

멤버의 값을 복사하여 생성하는 생성자 인자는 const Type &


실행순서

  • 명시적
    • 초기화 리스트
    • 선처리 영역의 부모 , 클래스 타입의 맴버 기본 생성자 호출
    • 코드블럭 실행
  • 암시적
    • 부모 , 클래스 타입 타입의 맴버 복사 생성자 호출
    • 기본 맴버 타입일 경우 복사 실행

암시적 복사 대입 연산자

대입 연산자의 오버로딩

  • 인자 const Type 반환형 자기자신
  • 실행 순서
    • 부모의 복사 대입 연산자 호출
    • 맴버가 기본 타입일 경우 메모리 복사
  • 맴버중 const 지정자나 참조 타입이 있을 시 에러 발생
profile
GameProgrammer

0개의 댓글