07.14

신승빈·2022년 7월 16일
1

KGCA 수업

목록 보기
7/128

namespace

외부 라이브러리 연동 시 충돌 가능성을 낮춰줌.

Reference

const int& a = 10;
int&& b = 10;

범위 지정 연산자

:: 연산자
범위 밖을 의미.
지역 block과는 다름. 전역 변수를 의미.

delete, delete[]

new[]로 할당 후 delete 시 undefined behaviour
MSVC에서는 정상 작동하지만 GCC에서는 해제가 안됨.

오버로딩

반환값만 다른 경우 ambigous 문제가 발생하기 때문에 불가능.

Default 매개변수

void func(int a, int b = 10)

매개변수의 끝에서부터 가능.
오버로딩된 디폴트 매개변수는 ambigous 문제를 발생시킬 수 있음.

void func(int a, char c = 'a')

inline

함수 호출 비용을 줄여서 실행속도 향상.
inline 키워드가 있다고 무조건 inline하는 것은 아님.
force inline해도 안될 수도 있음.

Reference : https://docs.microsoft.com/en-us/cpp/cpp/inline-functions-cpp?view=msvc-170#inline-__inline-and-__forceinline

C에서 bool변수

C99에서부터 표준으로 추가됨.

자료구조

자료를 효율적으로 처리하기 위해 자료의 특성에 따라 구분, 처리, 저장하는 작업
알고리즘 - 자료를 효율적으로 처리하는 절차

Library

header와 lib파일만 존재한다면 라이브러리를 사용할 수 있음.
source코드가 없이도 작동하므로 보안에 좋음.

Library 생성법


속성에서 구성 형식 변경.

빌드 후 이벤트 copy "A" "B" 구조를 통해 빌드 이후 적절한 디렉토리로 원하는 파일 복사 가능.
디렉토리 이동을 위해 "\\"로 작성하는 것이 좋음.

솔루션의 참조를 이용해 버전 변경 시 자동으로 수정된 라이브러리 파일 컴파일 가능.

Lib, Dll

정적 라이브러리 - 실행파일에 추가됨.
동적 라이브러리 - 실행파일에 추가되지 않음. 런타임에 연결.

주소 바인딩

컴파일 시간 바인딩

프로그램 내부 주소와 물리적 주소가 동일.
Embeded같은 곳에서 사용.

적재 시간 바인딩

적재 시간에 적재할 물리적 위치 결정.
프로세스 종료까지 물리적 위치 고정.

실행 시간 바인딩

MMU를 이용해 논리 주소와 물리 주소를 연결.
물리적 메모리 어디에 데이터가 적재될지는 모름.

Reference : https://dnr2144.tistory.com/94

페이징과 세그멘테이션

페이징

일정한 크기로 메모리를 분리하는 방법.

세그멘테이션

논리적 단위(code, data, stack 등)로 메모리를 분리하는 방법.

쓰레드

stack을 제외한 모든 메모리를 공유.
Heap 역시 공유되므로 동적할당을 통해 쓰레드간의 통신이 가능.

참고 : 프로세스가 종료되도 해제되지 않은 메모리는 사용 불가능한가?

특정 OS에 따라서는 프로세스의 모든 메모리가 반환되지 않는 경우가 존재한다는 주장이 있음.
만약 OS가 자동으로 해제한다면 일부로 해제하지 않고 프로그램을 종료함으로써 속도를 올릴 수도 있음.
그러나 개인적으론 메모리 해제는 반드시 해주는 것이 좋다고 생각함.

Reference : https://kldp.org/node/31099

profile
이상을 길잡이 삼아 로망을 추구합니다.

0개의 댓글