본문 바로가기

프로그래밍/C & C++92

[C++] 메모리 관리 (3) - 스마트 포인터 (Smart Pointer) References Professional C++ https://en.cppreference.com/w/ Contents 스마트 포인터 (Smart Pointer) unique_ptr, shared_ptr, weak_ptr [C++] 메모리 관리 (1) - 동적 메모리, 배열과 포인터 [C++] 메모리 관리 (2) - 메모리 문제 유형과 해결 방법 이전 포스팅 마지막 부분에서 스마트 포인터인 unque_ptr을 사용해서 메모리 누수를 방지하는 방법을 간단히 보여주었습니다. 지난 두 포스팅에 이어서 이번에는 메모리를 쉽게 관리해주는 C++의 스마트 포인터에 대해서 알아보도록 하겠습니다. 5. 스마트 포인터 Smart Pointer 방금까지 살펴봤듯이 C++에서 메모리 관리는 에러와 버그의 원인입니다. 메모.. 2022. 2. 8.
[C++] 메모리 관리 (2) - 메모리 문제 유형과 해결 방법 References Professional C++ https://en.cppreference.com/w/ Contents 흔히 발생하는 메모리 문제 유형 메모리 누수 감지 도구 (Visual C++, Valgrind) 이전 포스팅에 이어서 C++의 메모리 관리에 대해서 알아보도록 하겠습니다. [C++] 메모리 관리 (1) - 동적 메모리, 배열과 포인터 이번 포스팅에서는 먼저 흔하게 발생하는 메모리 문제 유형들과 이러한 문제들을 피하는 방법들에 대해 알아보겠습니다. 4. Common Memory Ptifalls new/delete/new[]/delete[]와 low-level 메모리 연산을 사용하여 동적 메모리를 관리하면 오류가 발생하기 쉽습니다. 메모리 관련 버그가 발생하는 상황을 명확하게 정리하는 것.. 2022. 2. 7.
[C++] 메모리 관리 (1) - 동적 메모리, 배열과 포인터 References Professional C++ https://en.cppreference.com/w/ Contents 동적 메모리(Dynamic Memory) 다루기 배열과 포인터 비교 low-level 메모리 연산 C++은 C와 마찬가지로 최대한의 자유를 보장하며, 우리가 무엇을 하고 있는지 잘 알고 있다고 가정합니다. C++ 언어 자체는 매우 유연하며, 안전성이 떨어지는 것을 감수하면서 성능을 추구하기 때문에 심각한 문제가 발생할 가능성이 있는 작업을 할 수도 있습니다. 메모리 할당(allocation)과 관리(management)는 C++ 프로그래밍에서도 특히 문제가 발생하기 쉬운 부분입니다. 그래서 높은 수준의 프로그램을 작성하려면 메모리 관리의 내부 작동 방식을 확실히 이해하고 있어야 하는데.. 2022. 2. 7.
[C++] string과 string_view References Professional C++ https://en.cppreference.com/w/ Contents C-Style Strings String Literals Raw String Literals C++ std::string 클래스 std::string_view 클래스 Nonstandard Strings C 언어에서는 단순히 널(NULL)로 끝나는 문자 배열로 스트링을 표현했습니다. 하지만 이렇게 하면 버퍼 오버플로우(buffer overflow)를 비롯한 다양한 문제들 때문에 보안 취약점이 드러날 수 있습니다. C++ 표준 라이브러리에서는 이러한 문제를 방지하기 위해 보다 안전하고 사용하기 쉬운 std::string 클래스를 제공합니다. 이번 포스팅에서는 C++에서 제공하는 strin.. 2022. 2. 6.
C++ 라이브러리 개요 References The C++ Standard Library: Second Edition includes C++17 https://en.cppreference.com/w/ Contents C++ History C++ 라이브러리 개요 C++ History C++과 표준 라이브러리의 역사는 오래되었습니다. C++은 1980년대에 등장해서 2017년 버전, 현재는 2020년 버전까지 이어져오고 있습니다. 지난 30~40년간 C++이 얼마나 달라졌는지는 C++ 표준 라이브러리만 봐도 알 수 있는데, C++은 객체지향 언어(object-oriented language)로 시작했다가, STL을 이용한 제너릭 프로그래밍 개념이 추가되고 최근에는 함수형 프로그래밍 개념도 상당히 반영되고 있습니다. C++의 발전 과.. 2022. 2. 6.
[C++] 비동기(Asynchronous) 실행 References 씹어먹는 C++ (https://modoocode.com/284) Contents std::future, std::promise std::shared_future std::packaged_task std::async 앞선 글들에서 이야기했던 쓰레드나 생성자-소비자 패턴의 경우을 사용하는 경우는 결국 프로그램의 실행이 한 갈래가 아닌 여러 갈래로 갈라져서 동시에 진행되어서 CPU를 조금 더 효율적으로 사용하기 위해서입니다. 즉, 프로그램을 비동기적(asynchronous) 실행을 하기 위해서 입니다. 이번 글에서는 이러한 비동기적 실행을 간단하게 구현할 수 있도록 도와주는 도구/기능들에 대해서 알아보겠습니다. std::future / std::promise 비동기적 실행을 통해서 하고 .. 2021. 8. 14.
[C++] Perfect Forwarding References 씹어먹는 C++ (https://modoocode.com/228) http://thbecker.net/articles/rvalue_references/section_07.html Effective Modern C++ (항목 28) Contents Perfect Forwading Universal Reference (보편 참조) 참조 축약(Reference Collapsing) std::forward 우측값 참조와 우측값 참조를 도입함으로써 해결할 수 있었던 Move Semantics의 관한 글에 이어서 이번 글에서는 Perfect Forwading에 대해서 알아보겠습니다. 2021.08.11 - [C & C++] - [C++] 우측값 참조(rvalue reference) [C++] 우.. 2021. 8. 13.
[C++] Move Semantics References 씹어먹는 C++ (https://modoocode.com/228) http://thbecker.net/articles/rvalue_references/section_07.html Contents Move Semantics(std::move) 2021.08.11 - [C & C++] - [C++] 우측값 참조(rvalue reference) [C++] 우측값 참조(rvalue reference) References 씹어먹는 C++ (https://modoocode.com/227) http://thbecker.net/articles/rvalue_references/section_07.html Contents 복사 생략(Copy Elision) 좌측값(lvalue)와 우측값(rvalue) .. 2021. 8. 12.
[C++] 우측값 참조(rvalue reference) References 씹어먹는 C++ (https://modoocode.com/227) http://thbecker.net/articles/rvalue_references/section_07.html Contents 복사 생략(Copy Elision) 좌측값(lvalue)와 우측값(rvalue) 우측값 레퍼런스(rvalue reference) 이동 생성자(move constructor) STL Container에서 사용할 때 주의할 점 요즘 threadpool 구현을 해보기 위해서 thread와 관련된 여러가지를 공부하다보니 컴파일 에러나 경고에서 자주 봤던 rvalue에 대해서도 조금씩 나오고, C++을 조금 더 효율적으로 사용하기 위해서 어느 정도 개념은 잡아야 한다고 생각이 들어서 우측값 참조에 대해.. 2021. 8. 11.
[C++] 생산자(Producer) / 소비자(Consumer) 패턴 References 씹어먹는 C++ (https://modoocode.com/270) Contents 생산자 / 소비자 패턴 Producer - Consumer 패턴 예시 생산자(Producer) - 소비자(Consumer) 패턴은 멀티 쓰레드 프로그램에서 자주 사용되는 패턴입니다. 여기서 생산자(producer)는 무언가 처리할 일을 받아오는 쓰레드를 의미합니다. 예를 들어, 웹사이트를 다운로드하여 분석하는 프로그램을 만들었다고 가정한다면, 이 경우 웹사이트를 다운로드하는 쓰레드가 생산자가 됩니다. 소비자(consumer)는 받은 일을 처리하는 쓰레드를 의미하며, 앞의 예에서 다운로드 받은 웹페이지를 분석하는 쓰레드가 소비자 역할을 하게 됩니다. 위와 같은 예시를 쓰레드로 구현해보겠습니다. #inclu.. 2021. 8. 9.