C++/개념(Concept) 5

True sharing / False sharing : std::hardware_..._interference_size

True sharing / False sharing : std::hardware_..._interference_size 1. 설명 False sharing은 2개 이상의 코어가 서로 다른 메모리 주소에 접근하지만, 두 주소가 동일한 캐시 최소 단위에 적제되어 있어(논리적으로는 전혀 영향이 없지만 캐시는 이를 모르기에) 동기화가 이루어져 성능이 하락하는것을 말합니다. True sharing은 false sharing과는 반대로 동일한 메모리 주소에 값을 쓸때를 의미합니다. 이때는 당연히 동기화가 이루어지기에(논리적으로도 그것이 맞고) 이번글에서는 딱히 다루지 않겠습니다. C++17 에는 이렇게 동일한 캐시라인에 적제되는지 판별할수 있는(L1 캐시 라인 크기를 얻어오는) 표준이 추가되었습니다. 다만, 아직까..

C++/개념(Concept) 2021.08.30

deleted 함수와 이동 연산의 overload resolution

deleted 함수와 이동 연산의 overload resolution 1. 설명 특수 멤버 함수는 경우에 따라 암시적으로 자동생성되지 않을 수도 있고, 혹은 명시적으로 삭제할수도 있습니다. 이러한 두 경우에 따라서 이동 연산(이동 생성, 이동 대입)이 overload 에 참여할 수도, 참여하지 않을 수도 있습니다. 그러면 경우에 따라 이동을 의도했지만 실제로는 복사가 일어나게 될 수 있으며, 성능 저하(대게는 프로그래머가 의도하지 않은)가 일어날 수 있습니다. 본 글에서는 편의를 위해 암시적으로 자동생성되지 않은 경우를 암시적 삭제로 부르도록 하겠습니다. 2. 예시 우선, 객체가 trivial 한 복사 및 이동연산을 지원한다면, 이동 연산은 무조건 복사 연산으로 대체됩니다. 사실 당연한 것입니다. tri..

C++/개념(Concept) 2021.05.30

C++ 개념: 특수 멤버 함수(special member function)

특수 멤버 함수(Special Member Function) 1. 설명 클래스의 다음과 같은 멤버 함수들을 말합니다. 1. 기본 생성자(constructo) 2. 소멸자(destructor) 3. 복사 생성자 및 복사 할당(assignment)자 4. 이동 생성자 및 이동 할당자 소멸자는 명시적(explicitly)으로 삭제하지 않는 한, 무조건 생성됩니다. 소멸자를 제외한 5가지 항목은, 사용자가 명시적으로 삭제하지 않아도 암시적으로(implicitly) 삭제되는 경우가 있습니다. 2. 예시 ㄱ. 기본 생성자 #include class foo{ public: }; int main(){ auto f = foo(); foo f2; foo f3(); return 0; } 위 예시 처럼, 기본 생성자는 일반적..

C++/개념(Concept) 2020.11.16