박싱과 언박싱 (Boxing & Unboxing) 박싱과 언박싱은 메모리 영역을 공부하면 알게되는 기법으로 값 형식의 데이터를 참조 형식으로 변환하는 과정을 박싱, 그 반대를 언박싱이라 한다. 박싱 (Boxing) 이해하기 쉽게 말하면, C#은 모든 객체의 최상단에 object가 있다. 즉, 모든 자료형은 object로 변환될 수 있다. 이러한 상황에서 int형 변수를 object로 바꾸어 보면 박싱이 되는 것이다. 박싱 (Boxing) int value = 42; // 값 타입 변수를 선언하고 초기화 object boxedValue = value; // 값 타입을 참조 타입으로 박싱하여 저장 주의할 점은 단순히 스택에서 힙으로 값을 복사하는 것이 박싱이 아니다. 클래스 객체를 new로 만들어 힙영역에 ..
메모리 풀링 (Memory pooling) 풀링이라는 단어 자체를 외우는 편이 좋다. 풀링은 특정 목적의 객체를 미리 특정 크기 혹은 갯수만큼 미리 생성/할당하고 필요에 따라 사용할 수 있도록 제공하고 사용이 끝나면 회수하여 다시 사용할 수 있도록 대비하는 것이다. (사용과 회수 과정에서는 필요에 따라 초기화 단계가 추가될 수 있다.) 대표적인 예로는 게임을 제작에 최적화를 위해 자주 사용되는 오브젝트 풀링 기법이나 게임 서버에서 자주 사용되는 IOCP가 있다. 목적 메모리 할당 및 해제는 많은 비용이 발생한다. 이는 메모리 단편화(fragmentation) 현상을 초래하여 성능저하에 큰 원인이 되기에 이러한 과정을 최소화할 수 있는 풀링 기법들이 다양한 부분에서 만들어졌다. 메모리풀링 기법들은 미리 만..
형변환 C에서 부터 캐스트 연산자는 변수 타입을 바꾸는 방면에서 편리하고 유연한 코드 작성을 하도록 도와준다. 하지만 그 결과 실제 데이터의 크기가 변환되는 과정에서 데이터가 손상되거나 메모리 공간이 부족할 경우 할당할 수 없게 될 수 있다. 또한 클래스 간 형변환에서 가장 중요한 사실은 "컴파일러는 다운캐스팅이 올바르게 일어났는지 모른다."는 것이다. 하여 개발자는 형변환이 가능한지 항상 먼저 확인해야하고 정말 확인을 못하는 경우 C++에서 지원하는 형변환 연산자들을 통해 변환이 가능한 상황을 확인하고 진행해야한다. C++는 형변환을 좀 더 안전한 변환을 위해 4개의 형변환 연산자를 제공한다. 형변환에 대한 글은 이전 글에도 있으니 잠시 살펴보자. 형변환 연산자의 필요성 타입 안전성 및 명확성 C의 형..
업캐스팅 (Upcasting) 업캐스팅은 자식 클래스 타입에 대한 참조(포인터 혹은 레퍼런스)를 부모 타입으로 형변환하는 것이다. 부모클래스 *b = new 자식클래스; 위 코드는 분명 다른 자료형임에도 어떠한 오류가 발생하지 않는다. 이는 자식 클래스에서 부모 클래스 객체에 할당될때 묵시적 형변환이 일어나기 때문이다. (실제로 모든 업캐스팅은 묵시적으로 일어날 수 있다.) 이는 포인터뿐만 아니라 좌변이 부모 클래스 레퍼런스 변수일 때도 일어난다. 이는 Call-By-Reference에도 발생한다. 자식클래스 d; 부모클래스 &p = d; void f(부모클래스 &b) { // ... } int main() { 자식클래스 d; f(d); ) 하지만 포인터나 레퍼런스를 사용하지 않고 객체 자체끼리 대입하려..
- Total
- Today
- Yesterday
- 컴파일
- thread
- 레지스터
- 초기화
- New
- 멀티스레드
- 구조
- 스레드
- 상속
- 할당
- 인터럽트
- 함수
- const
- 입출력
- 게임수학
- 백준
- static_cast
- 명령어
- CPU
- 운영체제
- 포인터
- 크기
- 수학
- c++
- 클래스
- dynamic_cast
- 알고리즘
- 프로세스
- 메모리
- malloc
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |