| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 |
- 논문
- sparse matrix
- listenserver
- 2020.02.23
- ppt
- 알고리즘연습
- 백준
- Algorithm
- C
- UNORDERED_MAP
- 독서
- class
- graphics
- ue5
- stretch force
- Til
- game jam
- C++
- 학습용
- ComputeShader
- 2020.03.16
- rendering pipeline
- 알고리즘
- Implicit method
- dedicatedserver
- Overloading
- 참조자
- Conjugate Gradient
- 프로그래머스
- TIP
- Today
- Total
목록C++ (18)
OSgood의 개발일기
병렬/병행 소프트웨어를 구현할 때 꼭 알아야 할 핵심 이론과 기법들을 정리한 메모입니다.📚 목차병행 프로그래밍이 필요한 이유병행 모델: 메시지 전달 vs 공유 메모리경쟁 상태와 데이터 경쟁임계 구역과 원자성스레드 동기화 도구락 기반 병행성의 한계병행성 설계 원칙락-프리 병행성 개념원자적 명령어와 메모리 장벽C++11의 std::atomic과 메모리 정렬고급 락 기법 (스핀 락, 재진입 락 등)SIMD 벡터화 프로그래밍GPGPU 병렬 프로그래밍1. 병행 프로그래밍이 필요한 이유문제 자체가 여러 제어 흐름에 더 적합한 경우가 있음.멀티코어 CPU 성능을 극대화하려면 병행 설계 필수.2. 병행 모델: 메시지 전달 vs 공유 메모리메시지 전달: 스레드 간 메시지를 주고받음.공유 메모리: 같은 메모리에 직접 접..
child process의 경우 자세한 디버깅이 안 되서 불편한 점이 많다. 이럴 때 유용한 visual studio extension이 있어서 포스팅을 한다. 해당 extension을 활용하면 세부디버깅이 가능하다. 다만, 해당 extension이 켜져있을 경우 해당 child process가 제대로 빌드가 되지 않기 때문에 빌드가 필요할 경우는 끄고 해야하며, 디버깅이 필요할 때만 켜는 것을 추천한다. https://marketplace.visualstudio.com/items?itemName=vsdbgplat.MicrosoftChildProcessDebuggingPowerTool
참조자와 포인터의 차이점을 간단히 정리하고자 한다. 이 포스팅은 내가 가끔 헷갈릴 때 보기위해서 아주 간단히 메모용으로 적어놓는 것이기 때문에 좀 더 자세한 내용을 원하시는 분들은 다른 포스팅을 참고하는 것이 좋을 것 같다. 그러므로 최대한 간단히 개념정도만 적고 사용법은 포스팅하지 않겠다. 참조자 int name1 =100; int &name2 = name1; 참조자는 별칭을 만든다고 생각하면 될 것 같다.(참조자는 선언과 동시에 무엇을 참조하고 있는지 초기화를 해야한다.) 포인터 int name1 =100; int *name2 =&name1; 포인터는 어떤 변수의 주소값 자체를 저장하여 그 변수를 가르키고 있다고 생각하면 된다.
이 두개는 이름이 비슷해서 자주 헷갈리는 개념이다. 나 또한 이 두가지의 이름 때문에 자주 헷갈리기 때문에 기억하기 위해서 간단히 포스팅하고자 한다. 아예 두개의 개념을 모르거나 좀 더 자세한 개념을 원하시는 분은 다른 블로그의 글을 찾아보는 것을 추천한다. 오버로딩(Overloading) 같은 클래스 안에서 같은 이름의 메서드를 사용하는 것. 왜? => 같은 메서드의 이름을 쓰면서 취하는 매개변수의 갯수나 타입을 달리할 수 있다. 오버라이딩(Overriding) 부모 class에서 정의한 메서드를 자식 class에서 변경하는 것 왜? => 자식 class에서 메서드를 정의할 때 부모 class에서 정의했던 메서드의 이름, 매개변수를 그대로 쓰고 싶은데 메서드의 자세한 작동방식을 바꾸고 싶을 때 이용한다.
Class의 디폴트 대입 연산자는 멤버 간의 Shallow copy로 되어 있다. 이 때 클래스의 멤버들이 동적할당을 이용하고 있지 않으면 큰 문제가 발생하지 않는다. 하지만 만약 복사하는 값이 주소값이라면 Shallow copy는 큰 문제를 야기하고 런타임 에러를 발생시킬 수도 있다. 왜냐하면 동적할당으로 얻은 메모리를 이용할 때 Shallow copy를 하게 되면 메모리 공간은 그대로이고 이것을 가르키는 포인터는 양쪽 객체에서 똑같이 가지고 있기 때문에 한 쪽 객체의 destructor에서 메모리를 해제할 경우 다른 쪽에서의 접근은 실뢰할 수 없는 메모리 공간이 된다. 그림을 보면 이해가 더 쉬울 것 같아서 간단히 그림을 만들어 보았다. 위와 같이 Shallow copy를 하게 되면 한쪽은 소멸시켰을..
연산자 오버로딩에 대해서 복습하던 도중에 유튜브에 잘 정리해놓은 동영상이 있어서 이것으로 내용을 대체하려고 한다.(개인적으로 이 부분은 글로 읽는 것보다 설명을 듣는게 이해가 훨씬 잘 될 것이라고 생각한다.) 출처 - (유튜브 크리에이터)W TF [C++] 10장- 2 연산자 오버로딩의 의미와 방법
이건 사실 내가 포스팅을 할 것은 아니고 모르는 부분을 정리하던 중 어떤 분의 블로그를 보게 되었는데 클래스의 진짜 핵심적인 부분만 잘 정리를 해놓으신 것 같아서 URL을 달아 놓으려고 한다. Class에 관해서 헷갈리시는 분이라면 한 번쯤 포스팅을 읽어보는게 도움이 될 것 같다. https://winplz.tistory.com/entry/C-클래스-정의 출처: https://winplz.tistory.com/entry/C-클래스-정의[원플]
[객체지향의 사실과 오해-조영호] 를 읽으면서 생각한 객체지향의 핵심을 간단히 기록하려고 포스팅을 한다. 객체지향의 핵심은 결국 행동에 있다. 어떤 행동을 하는 객체이냐가 중요한 것이다. 어떤 행동을 한다는 것을 역할을 가지고 있다는 것을 의미한다. (역할을 기준으로 추상화 하여 객체들을 나눈다.) 다시 말해 객체를 나누는 기준은 역할을 통해 결정하는 것이 OOP의 핵심인 것 같다. 역할을 가지고 있는 객체들이 서로 어떤 협력관계를 가지고 있으며 이러한 협력관계를 다시 추상화 시킬 수 있다면 보다 쉬운 OOP 구조를 만들 수 있을 것이다. P.S 추상화 - 중요한 특징을 찾아낸 후 간단히 표현하는 것 (naver-지식백과)