CPP 4

언어/C++ 아토믹 (Atomic, cpp17)

왜 필요? #include #include #include using namespace std; void add (int & num) { for(int i=0;i

언어/C++ Cpp 함수 (C++11 lambda, std::function)

C++11에 추가된 람다와 function wrapper는 Cpp에서도 함수형 프로그래밍이 어느정도 가능하게 해줬다. (그럼에도 Cpp는 기본적으로 객체지향 프로그래밍 + performance에 최적화 되어있다고 보아야 한다. + DOP를 더한 정도?) 아무튼 함수를 object/variable 처럼 다루기 편해짐. Function Object 함수형 프로그래밍의 시작은 함수를 변수처럼 다룰 수 있어야 한다는 것이다. 기존(C++11이전의) Cpp에서는 함수 오브젝트를 사용했는데 대충 다음과 같다. #include using namespace std; class Plus { public: explicit Plus(int val) : local_val_{val} {} int operator() (int x..

언어/C++ Cpp - 상속#2

2021.07.18 - [언어/C++] - Cpp - 상속#1 Cpp - 상속#1 기본적인 내용은 안 씀. 상속 상속은 왜 쓸까? 클래스 간의 관계 : 동물 -> 고양이 사람.. 코드 재사용 : 동물은 잠을 자.. 그럼 고양이 사람도 다 잠을 자 일관적인 클래스 인터페이스 (class interface tsyang.tistory.com Object Slicing 오브젝트 슬라이싱은 Cpp 상속에서 발생하는 문제이다. using namespace std; class Animal { public : void virtual Speak() { cout

이론/일반 객체 메모리, Object Alignment (feat. false sharing)

#include class AAA{private: int intA; int intB; double doubleA;};class BBB{private: int intA; double doubleA; int intB;};int main(){ AAA a; BBB b; std::cout 위의 코드는 무엇을 출력할까? AAA와 BBB는 메모리에서 몇 바이트를 차지할까? 둘 다 int 2개 double 1개를 가지고 있다. 그래서 둘 다 16바이트라고 생각할 수 있지만 그렇지 않다. AAA는 예상대로 16바이트이지만 BBB는 24바이트이다. 왜일까? 메모리 패딩컴파일러는 객체의 메모리를 할당할 때 메모리 공간에 padding을 넣어준다. (안 넣는 컴파일러도 있지만 현대에는 대부분 넣는다고 보면 된다.) 패딩..