뜯고 또 뜯어보는 컴퓨터
-
Vtable - 어디에 존재하는가..뜯고 또 뜯어보는 컴퓨터/씨쁠쁠 C++ 2022. 11. 3. 00:59
0. Vtable 이란 vtable 이란, Virtual Function Table의 약자로, 상속 구조에서 메서드를 virtual로 선언하게 되면, vtable이 생성되게 됩니다. vtable(가상 테이블)은 특수한 메모리 영역을 활용하여 알맞은 코드를 호출하게 되는데, 기본적인 정보는 virtual 메서드가 하나 이상 정의된 클래스마다 vtable은 하나씩 구현되어 있습니다. 따라서 vtable을 가진 클래스를 생성한 객체마다 이 vtable에 대한 포인터를 가지게 됩니다. vtable은 상속구조에서 동적 바인딩(dynamic binding)이라는 중요한 특성을 가지므로, 꼭! 공부해두시길 바랍니다. 1. vTable 실험 단일 상속구조를 가진, class의 경우 다음과 같이 메모리 구조를 가지게 됩..
-
Overloading 오버로딩 - 연산자뜯고 또 뜯어보는 컴퓨터/씨쁠쁠 C++ 2022. 11. 2. 12:54
0. Overloading 이란? C++에서는 코드에 이름이 같은 함수가 여러 개 있다면, 컴파일러(Compiler)는 함수를 호출하는 시점에, 타입이 일치하는 함수를 선택하게 되는데, 이를 오버 로딩(Overloading)이라 합니다.(오버 라이딩(Overriding)과 혼동하는 경우가 많으니, 주의해야 합니다.) 더구나 C++는 대부분의 연산자가 클래스와 관련된 특수 연산을 수행하도록 오버 로드하는 기능을 제공하는데, 예를 들어서 String 클래스는 + 연산자를 오버 로드하여 두 문자열을 연결할 수 있도록 합니다. 다양한 오버 로딩 연산자가 있지만, 이 글에서는 연산자 함수의 오버 로딩에 대해서 알아보겠습니다. (연산자 함수를 오버 로딩하면서, 유저가 만든 다양한 구조체 및 클래스에 대해서, 연산을..
-
Shared_ptr 내부 구조 & 주의점뜯고 또 뜯어보는 컴퓨터/씨쁠쁠 C++ 2022. 10. 26. 17:43
0. shared_ptr shared_ptr 이란, 어떤 객체에 대하여, 더 이상 사용하는 곳이 없을 때, 자동적으로 메모리를 해제해주어, 사용자의 편의성을 증가시켜 주는 녀석입니다. msdn에서는 다음과 같이 설명하고 있습니다. shared_ptr은 내부적으로 각 객체가 몇 번 참조되었는지를 나타내는 control block을 가지게 되고, control block 이 0이 되었을 시, 객체의 메모리를 해제하게 됩니다. 원리는 이쯤 하면 되었고, shared_ptr에 대해 더 깊이 이해해보겠습니다. 1. shared_ptr의 내부 count 동작 shared_ptr 은 내부에 다음과 같은 control block을 가지고 있는데, T 객체에 대한 포인터 참조된 횟수를 세어주는 Reference Coun..
-
가상 소멸자 / 가상 소멸자 사용 이유뜯고 또 뜯어보는 컴퓨터/씨쁠쁠 C++ 2022. 10. 26. 12:02
0. 상속이란 개념 c++ 뿐만 아니라 다른 언어에서도 상속(inheritance)이란 기존의 클래스에 기능을 추가하거나 재정의하여 새로운 클래스를 정의하는 것을 의미합니다. 상속을 사용하게 되면, 기존에 정의되어 있는 클래스의 모든 필드와 메서드를 물려받아, 새로운 클래스를 생성할 수 있습니다. 그리고 상속을 하게 되면, 각 계층(부모 또는 자식)에 맞는 메모리 할당이 발생하게 되는데, 이는 다형성(polymorphism)이라는 중요한 성질을 띄게 됩니다. 다형성에 관한 글은 설명이 많아져 따로 작성하겠습니다..! 아무튼 상속을 사용하게 되면 여러가지 장점도 존재하지만, "주의해야 할 점"도 존재합니다. 그중 하나가 가상 소멸자에 관한 내용입니다. 1. 생성자 / 소멸자 호출 순서 파생된 클래스의 생성..
-
[C++] String to Int, Float, Double 자료형 / stoi, stol, stoll뜯고 또 뜯어보는 컴퓨터/씨쁠쁠 C++ 2022. 10. 26. 00:56
0. atoi 계열 함수 및 sscanf( ) 기존 C에서는 str형식 사용시 다른 자료형(int, double, float)에 맞도록 읽어오려면, atoi( ) 및 sscanf( )로 형식을 지정해주었으며, 이를 활용한 간단한 예시는 밑과 같습니다. const char *str = "12345"; // atoi 계열 함수 int x = atoi(str); // sscanf 사용 int y; sscanf(str, "%d", &y); c++에서는 이와 비슷한 방법으로 stoi( ) 및 타입 캐스팅 그리고, 반복자를 활용하여, 데이터 변환을 할 수 있는 데, 그중에서, stoi( ) 계열 함수에 대해 알아보겠습니다. 1. c++ 에서의 stoi( ) c++에서 stoi() 함수는 문자열을 정수 값으로 변환하..
-
Map 을 Vector 로 변환하기뜯고 또 뜯어보는 컴퓨터/씨쁠쁠 C++ 2022. 10. 20. 17:09
0. Map을 Vector로 변환하기 Map을 Vector 자료형으로 변환할 일이 있었는데, 여러 가지 방법이 존재하여, 글로 남겨놓습니다. C++에서 Map 은 정렬되어 있는 컨테이너로써, Key-Value 쌍으로 이뤄져 있습니다. 이때, Key 들은 Compare 될 수 있는 값들에 의해 정렬되어 있고, Bidirectional 반복자를 가집니다. 1. Map 구조체 Vector로 변환하기 변환하는 방법에는 여러가지가 존재하지만, 대표적인 것 몇 가지만 알아보겠습니다. Vector 생성자 이용하기 Copy 알고리즘 이용하기 Transform 알고리즘 이용하기 ForEach 알고리즘 이용하기 방법 등이 존재합니다. 1 번은 Map의 반복자가 Pair 인 점을 활용하여, Vector 생성자에 반복자..
-
네트워크 기초 (1)뜯고 또 뜯어보는 컴퓨터/네트워크(Network) 2022. 10. 5. 15:38
TCP와 UDP의 기본적인 정의, 특징, 비교 TCP/IP 스택은 총 4단계로 이루어져 있는데, LINK계층 IP 계층 TCP/UDP 계층 Application 계층으로 이루어져 있다. 이는 '인터넷 기반의 효율적 데이터 전송'을 해결하기 위하여, 설계된 패러다임으로 하나의 큰 프로토콜 설계로 해결한 것이 아닌 문제를 작게 만들어 해결한 것입니다. TCP/UDP 계층은 '전송 계층' 이라고 불리기도 하는데, TCP와 UDP 모두 연결된 다른 네트워크와 통신하기 위한 프로토콜로 정의할 수 있다. 결론적으로 말하면, IP의 상위계층에서 Host 대 Host의 데이터 송수신 방식을 약속한 것을 TCP 그리고 UDP라고 할 수 있겠다. TCP / UDP의 간략한 특징은 다음과 같다. TCP UDP 연결 방식 연..
-
스마트 포인터 : Unique_ptr뜯고 또 뜯어보는 컴퓨터/씨쁠쁠 C++ 2022. 5. 8. 10:24
C+11 부터, BOOST 라이브러리 들의 boost::shared_ptr, boost::scoped_ptr 등은 표준화 되어, std::unique_ptr, std::shared_ptr 들이 되었습니다. 개인적으로 스마트 포인터를 직접 만들어 보는 것은 별로 좋은 생각이 아닙니다. 스마트 포인터들의 작동방식은 간단해보이지만, 실제로 스마트 포인터들은 모든 맥락에서 올바르게 작동하도록 노력한 라이브러리 이기 때문입니다. 요번 글에서는 Smart Pointer 중 하나인 Unique Ptr 의 사용법 과 간단한 예시를 보입니다. 먼저 Unique_ptr 이란 ? (cpp reference 발췌) std::unique_ptr is a smart pointer that owns and manages anoth..