쾌락없는 책임 (공부)/C++ 짜잘이
-
C++ fill_n vs memset, 무슨 차이가 있을까쾌락없는 책임 (공부)/C++ 짜잘이 2022. 2. 28. 23:06
서론 알고리즘 문제 풀이를 하다 보면 배열이나 vector 등을 초기화해야 하는 일이 많습니다. 첫 생성시 0으로 초기화 된다는 사실이 있지만 이것도 환경따라 다를 수 있고 또는 0이 아닌 다른 값으로 초기화해야 하는 일이 있습니다. 그럴때 for문을 사용하기 싫어서 fill_n, memset 등의 함수를 사용해서 값을 세팅하게 됩니다. 그런데 언제 한번 2차원 배열 등을 사용할 때 초기화가 제대로 되지 않는 경우가 있었습니다. 그래서 오늘 두 함수에 대한 차이점을 알아보기 위해서 글로 정리하게 되었습니다. 두 함수의 차이 일단 헤더부터 차이가 있습니다. fill 관련 함수들은 헤더에 있으며 memset는 에 있습니다. 그리고 memset의 경우 c 에서 파생된 함수로 fill_n 보다 조금 더 빠르다는..
-
C++ pimpl과 관련한 이야기들쾌락없는 책임 (공부)/C++ 짜잘이 2022. 2. 16. 23:11
개요 C++에 대한 이해도를 더 높여보기 위해서 Effective C++을 읽던 도중 pimpl 구조라는 흥미로운 키워드를 보게 되었습니다. 구현부는 따로 저장하고 이 객체의 주소를 가리키는 포인터를 사용하겠다는 아이디어입니다. 딱 보기에 객체 간 연산을 할 때 도움이 되지 않을까 하는 생각이 들었는데 이것에 대해서 여기저기 알아보고 정리해본 것들을 적어보겠습니다. pimpl - pointer to inplementation 의 기본 형태 class widget { // public members private: struct impl; // 아래 사용을 위한 전방 선언 std::experimental::propagate_const pImpl; }; struct widget::impl { // 실제 구현 ..
-
C++ 구조체, 클래스 패딩쾌락없는 책임 (공부)/C++ 짜잘이 2022. 1. 24. 23:37
구조체 패딩? 위 코드에서 Ex1, Ex2 는 들어있는 정보량이 같은데 각 구조체별 사이즈를 찍어보면 Ex1은 32바이트, Ex2는 24바이트가 나오게 됩니다. 구조체가 한두개라면 모를까 기본제공 타입처럼 많이 사용한다면 1개당 적어도 8바이트의 손실이 일어날 것입니다. 위와같은 현상이 나타나는 이유는 바로 패딩(Padding) 때문입니다. CPU가 메모리에 접근해서 읽을때 1워드 단위로 읽게 됩니다. 32비트의 경우 4 바이트, 64비트의 경우 8 바이트를 읽게 됩니다. 그리고 이렇게 읽는 방식때문에 구조가 달라지게 됩니다. struct Ex{ char a, b; int x; }; 예시로 이런 구조체가 있다고 하면 실제 정보는 6 바이트지만 메모리에는 8바이트를 차지하게 됩니다. a b x x x x ..
-
C++ 에서 증감 연산자 오버로딩, 전위, 후위 연산자를 구별하는 방법쾌락없는 책임 (공부)/C++ 짜잘이 2022. 1. 11. 22:40
참고하면 좋은 곳 Purpose of Dummy Parameter in Postfix Operator Overload? c++ When overloading the postfix operator, I can do something simple like Class Foo { private: int someBS; public: //declaration of pre &postfix++ Foo operator++(); //rest of class not stackoverflow.com 전위, 후위를 더미로만 구분해서 오버로딩 class Example{ private: int m_val; public: Example operator++(); }; 위 예시 클래스에서 증감 연산자를 오버로딩 한다고 하면 아래와 같이..