[TOC]
이 글은 C와 C++을 한권이라도 읽은 사람 대상으로 적었습니다. 개인 정리용에 가까우므로, 이걸로 공부하지마세요. !
메모리 구조
CODE | 함수, 제어문, 상수 영역(컴파일시 결정) |
---|---|
DATA | 전역 변수(컴파일시 결정) |
BSS | 초기화값이 없는 전역변수(컴파일시 결정) |
HEAP | 동적 할당(런타임) |
Stack | 지역 변수(런타임) |
- 스택에서 자료(로컬변수)를 만지는게 제일 빠르다.
- 가능한 전역변수는 사용하지않는게 속도상에서 좋다.
- 동적할당은 어느정도되면 안만들어진다. 32비트 컴퓨터일경우 (1.98G)
전처리기
1 | __DATA__ // 컴파일 날짜를 나타내는 문자열 |
함수 호출 스택
1 | Debug 중 일때, BreakPoint를 통해 인터럽트를 걸어주면(멈추게 하면), 함수 스택이 있다. |
바이트 순서
빅 엔디안은 큰 단위의 바이트가 앞에 오는 방식, 리틀엔디안은 작은 단위의 바이트가 뒤에 오는 방식이다.
네트워크 장비들은 빅 엔디안을 쓰고, 우리와 같은 PC는 리틀 엔디안 식으로 저장한다.
Pointer
1 | /* 접근 자료 크기 */ |
Const Pointer
1 | // C/C++ 사용하면서 조낸 헤깔린다 |
Function Pointer
1 | // 콜백함수처럼 사용하는 방법 중 하나인 함수포인터이다. |
구조체
1 | // C++ 규약이 발전하면서 구조체랑 클래스랑 다른건 접근지정자 말곤 없는것 같다. |
인라인
1 | C에서의 매크로함수의 단점을 달피하고자 나왔다. |
정보은닉, 캡슐화
1 | 대부분 책에서는 정보은닉 및 캡슐화 예제를 적어놓고 |
생성자, 소멸자
1 | // 생성자 |
Placement New
1 | /* malloc으로 생성한 객체를 생성자따로 호출할 방법이 바로 Placement New이다. */ |
맴버 이니셜라이저
const 맴버 변수를 사용한다면 필수 사용! has-a 상속관계에서도 사용!
class 맴버 변수에 대해 자체적으로 사용해야된다면 포인터 변수를 따로 빼서 사용하면 훨씬 빠르다.
this 포인터는 너무 느림.!
복사 생성자
1 | // 일반 대입연산은 얇게 복사해버린다. |
Friend, Const, Static
1 | /* 이것도 오지게 짜증난다. */ |
상속, 다형성
1 | class Person; |
가상함수
1 | // 오버라이딩 된 함수가 virtual 이라면, 오버라이딩 함수 또한 자동으로 virtual이어야만 한다. |
순수 가상함수
1 | // 인터페이스 용도로써 사용하며, (외형 전달), 상속받은 클래스가 무조건 받아서 만들어줘야 한다. |
가상 소멸자
1 | // Up Cast 상황이든, Down Cast 상황이든, 상속관계에서 |
연산자 오버로딩
1 | Point operator+(const Point &p2) |
템플릿
1 | // C++ 11 ,14 개념까지 들어가면 대박난다. |
Exception
1 | try |
스택 풀기
1 | //Stack Unwinding(스택 풀기) |
C++ Casting
1 | // 이제부터 습관들려야 할 캐스팅 |