λͺ©λ‘μ 체 κΈ (1103)
KoreanFoodie's Study
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bc9egb/btstRUxGNhZ/pEgj7faGxwh1yHjsQRHLsK/img.png)
[C++ κ²μ μλ²] 2-7. λ©λͺ¨λ¦¬ ν #2 ν΅μ¬ : 1. LockFreeStack μ μ΄μ©νμ¬ Stack μ κ΄λ¦¬ν΄ 보μ. μ΄μ Entry μ λν λ©ν μ 보λ Header κ° κ΄λ¦¬νλ€! μ΄μ κΈμμλ λ©λͺ¨λ¦¬ νμ μ¬μ©ν¨μ μμ΄ ν¬κΈ°λ³λ‘ νμ λ§λ€κ³ ,κ° νμ νμ μ κ·Όν λ Lock μ κ±°λ λ°©μμ μ¬μ©νλ€. ν λ° λ λμκ°, μ΄λ² κΈμμλ LockFreeStack μ μ¬μ©νλ©΄μ λ©λͺ¨λ¦¬ ν¨μ¨μ±μ κ³ λ €ν ꡬνμ μ 보μ΄κ³ μ νλ€. μ¬μ€ main ν¨μμμμ μ¬μ©μ μ΄μ κΈμμ νλ κ²κ³Ό κ±°μ λμΌνλ€. μ.. μ°¨μ΄κ° μλ€λ©΄, λ©λͺ¨λ¦¬ νμ κ°μ μ μΌλ‘ κ±°μΉμ§ μκ³ μ§μ Stack μ λ§λ€μ΄μ μ¬μ©νλ€λ κ²μΈλ°, μΌλ¨ μ½λλ₯Ό 보μ. LockFreeStack.h DECLSPEC_ALIGN(16) struct S..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/NB0GS/btstMgTRDDx/kuBaM4j32NBsW8ksEy0pck/img.png)
[C++ κ²μ μλ²] 2-6. λ©λͺ¨λ¦¬ ν #1 ν΅μ¬ : 1. λ©λͺ¨λ¦¬ νμ μ΄μ©νλ©΄, λ©λͺ¨λ¦¬ ννΈνλ₯Ό νλ‘κ·Έλλ° λ 벨μμ μ΄λ μ λ ν΄μν¨μΌλ‘μ¨ λ©λͺ¨λ¦¬λ₯Ό μ’ λ ν¨μ¨μ μΌλ‘ μ¬μ©ν μ μλ€. 2. ν λΉμ νμν λ©λͺ¨λ¦¬ μ‘°κ°μ ν¬κΈ°μ λ°λΌ λ©λͺ¨λ¦¬ νμ κ°κ° λ§λ€μ΄ μ¬μ©νλ κ²½μ°κ° μκ³ , κ°μ μ¬μ΄μ¦λ§ μ¬μ©νλ λ©λͺ¨λ¦¬ νμ νμ©ν μλ μλ€. 3. λ©ν° μ°λ λ νκ²½μμ λ©λͺ¨λ¦¬ νμ νμ©νλ€λ©΄, ν μ κ·Ό μ Lock μ μ μ‘μμ£Όλλ‘ νμ. μ€λΈμ νΈ νλ§μ μμ£Ό.. μ€λλ μ μ κΉμ κΈ°λ²μ΄λ€. μ£Ό λͺ©μ μ λ©λͺ¨λ¦¬ ννΈνλ₯Ό μ΅μννκΈ° μν΄ νλ‘κ·Έλλ° λ 벨μμ λ©λͺ¨λ¦¬λ₯Ό ν¨μ¨μ μΌλ‘ κ΄λ¦¬νκΈ° μν¨μΈλ°, μ¬μ€ μ£Ό 골격μ κ°λ¨νλ€. λ©λͺ¨λ¦¬ μ‘°κ°μ λ΄μ 'ν'μ λ§λ€κ³ , λ©λͺ¨λ¦¬κ° νμν λ μλ‘κ² λ©λͺ¨λ¦¬λ₯Ό ν λΉνκ³ , ν λΉν λ©..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/Sg0cd/btstnw5AywT/uN0CllCO38VBVew2Y5e7Ek/img.jpg)
[μΈλ¦¬μΌ] UI μμ μ λλ©μ΄μ μ μ΄λ²€νΈκ° λλ¬μμ μλ €μ£Όλ λ°©λ² ν΅μ¬ : 1. UI μ μ½μ λ μ λλ©μ΄μ μμ μ΄λ²€νΈλ₯Ό μΆκ°νκ³ , κ·Έλνμμ μ΄λ²€νΈκ° λ°μνμ λ νΈμΆν ν¨μλ₯Ό C++ μμ κ²μν΄μ μ°κ²°ν΄ μ£Όλ©΄ λλ€. κ°λ κ·Έλ° κ²½μ°κ° μλ€. μ½λλ‘ νμ΄μΌ νλ λμκ³Ό μ°μΆμ ν¨κ» μ¬μ©ν΄μΌ ν λ, νΉμ λμμ μ°μΆμ΄ λλλ νμ΄λ°μ μμ‘΄ν΄μΌ νλ κ²½μ°κ°. λνμ μΌλ‘ μ λλ©μ΄μ μ΄ μλλ°, μ λλ©μ΄μ μ΄ μμ ν λλκ±°λ, νΉμ μμ μ μμ λ μ½λμμ νΉμ λμμ μννλλ‘ λ§λ€μ΄μΌ νλ μΌμ΄μ€κ° μμ μκΈ°κ³€ νλ€. λ³΄ν΅ μ€ν¬ μͺ½ ꡬνμ νλ€λ³΄λ©΄, Notify κ°μ κ±Έ λ§λ€μ΄μ μ΄λ₯Ό ν΄κ²°νκΈ°λ νμ§λ§.. UI μ κ²½μ°μλ, μ΄λ²€νΈ νΈλ¦¬κ±°λ₯Ό ν΅ν΄ μ΄λ₯Ό ν΄κ²°ν μ μλ€. μ΄μ μμλ₯Ό 보μ. μΌλ¨ μνλ UI λ₯Ό ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/JxLFt/btssaBsOQcS/EtJUi9YgYSiWmF6oRzGsyK/img.png)
[C++ κ²μ μλ²] 2-5. STL Allocator ν΅μ¬ : 1. STL μλ£κ΅¬μ‘°μμ μ¬μ©νλ allocator λμ , μ°λ¦¬κ° μ§μ λ§λ STL Allocator λ₯Ό μ μ©ν 컀μ€ν STL μ λ§λ€μ΄ 보μ. 2. STL Allocator λ allocate μ deallocate ν¨μλ§ μ μν΄ μ£Όλ©΄ λλ©°, STL νΉμνμμ Allocator μ μΈμλ₯Ό μ°λ¦¬κ° λ§λ STL Allocator λ‘ λ°κΏμΉκΈ°ν΄μ£ΌκΈ°λ§ νλ©΄ λλ€! μ°λ¦¬λ μ§λ μκ°μ Stomp Allocator λ₯Ό ꡬννλ©΄μ, λ©λͺ¨λ¦¬ ν λΉ/ν΄μ λ₯Ό 컀μ€ν°λ§μ΄μ§ ν μ μλ€λ κ²μ μκ² λμλ€. κ·Έλ¦¬κ³ ν λ° λ λμκ°μ, μ¬μ€ STL μλ£κ΅¬μ‘°(vector, queue λ±)μ μ΄μ©ν λλ, μ°λ¦¬κ° μ§μ λ§λ allocator λ₯Ό μ¬μ©ν μ μλ€! μ΄..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/9zDjv/btsr5XJni0x/fZZObflkKscbKXKgXfd2i0/img.png)
[C++ κ²μ μλ²] 2-4. StompAllocator ν΅μ¬ : 1. νλ‘κ·Έλ¨μ κ°μ λ©λͺ¨λ¦¬λ₯Ό μ¬μ©νλ―λ‘, λ©λͺ¨λ¦¬ μ€μΌμ΄ μ¦κ°μ μΌλ‘ λ°κ²¬λμ§ μμ μλ μλ€. 2. StompAllocator λ₯Ό μ¬μ©νλ©΄, ν λΉ λ° ν΄μ μ 'μ€μ λ‘' λ©λͺ¨λ¦¬μ ν λΉκ³Ό ν΄μ κ° μΌμ΄λλ―λ‘, λ©λͺ¨λ¦¬ μ€μΌμΌλ‘ μΈν λ¬Έμ λ₯Ό μ¦κ°μ μΌλ‘ λ°κ²¬ν μ μλ€(alloc μ 'μμ½' μνλ°μ μ¬μ©μν¨). 3. PageSize μ Granularity λ±μ κ°λ μ μ μμλμ. μΌλ°μ μΌλ‘ κΈ°λ³Έ PAGE_SIZE λ 4KB, Granularity λ 64KB μ΄λ€. μ΄μ μ μΈλ¦¬μΌ μμ§κ³Ό κ΄λ ¨λ ν μ€νΈλ₯Ό μ§νν λ, UnrealVS λ₯Ό μ΄μ©ν΄ '-stompmalloc' ν μ€νΈλ₯Ό νλ λ΄μ©μ ν¬μ€ν ν μ μ΄ μμλ€. StompAllocator λ₯Ό ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/tax5J/btsr66SsGCT/WSFXiEdOPD0X8kf7309IM0/img.png)
[C++ κ²μ μλ²] 2-3. Allocator ν΅μ¬ : 1. C++ μμλ new μ delete λ μ€λ²λ‘λ©ν μ μλλ°, Allocator λ₯Ό λ§λ€μ΄ 컀μ€ν νλ new μ delete λ₯Ό μ¬μ©ν΄ 보μ! 2. placement new κΈ°λ²μ μ΄μ©νλ©΄, λ΄κ° μ§μ ν λ©λͺ¨λ¦¬μ κ°μ²΄λ₯Ό μ΄κΈ°νν μ μλ€! λλκ²λ(?) C++ μμλ new μ delete λ₯Ό μ€λ²λ‘λ©νμ¬, λ©λͺ¨λ¦¬ κ΄λ¦¬λ₯Ό μ¬μΈνκ² μ»€μ€ν°λ§μ΄μ§ν μ μλ€. static void* operator new(size_t size) { cout
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/JL6Sy/btsrUs4mijk/VIqB0Dmc91KBEWg8h5G1WK/img.png)
[C++ κ²μ μλ²] 2-2. μ€λ§νΈ ν¬μΈν° ν΅μ¬ : 1. μ€λ§νΈ ν¬μΈν°μλ 3μ’ λ₯κ° μλ€. unique_ptr, shared_ptr, weak_ptr. μ΄ μ€, unique_ptr λ μμ κΆ κ°λ μ μν κ°λ¨νκ³ κ°λ²Όμ΄ μ€λ§νΈ ν¬μΈν°μ΄λ€. 2. shared_ptr λ₯Ό μμ±νλ©΄ μ¬μ©νκ³ μ νλ νμ μ λν λ©λͺ¨λ¦¬μ μ°Έμ‘° μΉ΄μ΄νΈ λ±μ κ΄λ¦¬νλ μ μ΄ λΈλ‘(Control Block)μ λν λ©λͺ¨λ¦¬κ° λ λ€ ν λΉλλ€. shared_ptr μ κ²½μ° μν λ¬Έμ κ° λ°μν μ μμΌλ―λ‘, μ£Όμν΄μΌ νλ€! 3. shared_ptr μ λν μ°Έμ‘° νμκ° μ¬λΌμ§λ©΄ μ°λ¦¬κ° μ¬μ©νκ³ μ νλ λ°μ΄ν°μ λν λ©λͺ¨λ¦¬λ ν΄μ λλ, λ§μ½ ν΄λΉ ν¬μΈν°λ₯Ό μ°Έμ‘°νλ weak_ptr κ° μμ κ²½μ°, μ μ΄ λΈλ‘μ ν΄λΉ ν¬μΈν°λ₯Ό μ°Έμ‘°νλ weak_..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/M3uPO/btsrS4np7w6/Z5MLbJOCqIAFmQ0mC4tzD0/img.png)
[C++ κ²μ μλ²] 1-25. Reference Counting ν΅μ¬ : 1. λ©ν° μ°λ λ νκ²½μμ, μ ν¬μΈν°λ₯Ό μ¬μ©νλ κ²μ μΈμ λ μννλ€. μλμΉ μκ² delete λ ν¬μΈν°λ₯Ό μ¬μ©νλ €κ³ ν μλ μκΈ° λλ¬Έμ΄λ€. 2. μΌλ°μ μΌλ‘λ Smart Pointer λ₯Ό ν΅ν΄ μ΄λ° λ¬Έμ λ₯Ό ν΄κ²°νλλ°, ν΅μ¬μ μΈ λΆλΆμ κ²°κ΅ Reference Count λ₯Ό 체ν¬νμ¬ nullptr μ μ κ·Όνλ κ²μ λ§λ κ²μ΄λ€! λ¬Όλ‘ SharedPtr κΉμ§ μ λλ‘ μ¨ μ£Όμ΄μΌ λ¬Έμ λ₯Ό λ§μ μ μλ€. λ©ν°μ°λ λ νλ‘κ·Έλλ°μ ν λ, μ ν¬μΈν°λ₯Ό μ¬μ©νκ² λλ©΄ μλμΉ μκ² nullptr μ μ κ·Όνλ κ²½μ°λ₯Ό λ§λ±λ¨λ¦¬κ² λλ€. μλμ μμλ₯Ό 보μ. λ μ΄μ€μ ν°λ μ΄ μλ€κ³ νκ³ , ν°λ μ΄ λ μ΄μ€λ₯Ό νκ²ν νμ¬ κ²©μΆ μν€λ κ²μ μμν΄ λ³΄μ! ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/OqtaQ/btsqCrxMvRS/GINATIQPgOgDwfYPbgd2g1/img.png)
[C++ κ²μ μλ²] 1-24. μ°μ΅λ¬Έμ (μμμ κ°―μ ꡬνκΈ°) ν΅μ¬ : 1. μ°μ΅λ¬Έμ λ₯Ό νμ΄λ³΄μ... (μ£Όμ΄μ§ μ«μκΉμ§μ μμμ κ°―μ ꡬνκΈ°) 2. μ°λ λ νΉμ, future λ₯Ό ν΅ν΄ ꡬνν μ μλ€. 3. thread::hardware_concurrency() λ₯Ό μ΄μ©ν΄, μ€μ μ½μ΄ κ°―μλ§νΌ μ°λ λλ₯Ό μμ±νλ κ²μ΄ λ ν¨μ¨μ μΌ μ μλ€(κ·Έλ³΄λ€ ν¨μ¬ λ§μ΄ μμ±νλ κ²λ³΄λ€). μ΄μ μ°μ΅λ¬Έμ λ₯Ό νμ΄λ³΄μ. μ£Όμ΄μ§ μ«μμ λν΄, 1λΆν° ν΄λΉ μ«μκΉμ§ μμμ κ°―μλ₯Ό ꡬνλ λ¬Έμ μ΄λ€. μΌλ¨ λ©ν° μ°λ λλ₯Ό μ΄μ©ν κ²μ΄λ, κ° μ°λ λμ νμ λ³΄λΌ ν¨μλ₯Ό λ€μκ³Ό κ°μ΄ μ μνμ : bool IsPrime(int InInput) { if (InInput
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cY6vky/btsqvjabLBa/aApERzVw1kKxdtHKCXKph0/img.png)
[C++ κ²μ μλ²] 1-23. DeadLock νμ§ ν΅μ¬ : 1. λ°λλ½μ μ‘λλ€λ κ²μ, κ²°κ΅ λ½μ μ‘λ λ°©μμ μμ΄ μ¬μ΄ν΄μ΄ νμ±λλμ§λ₯Ό νλ¨νλ κ²κ³Ό λμΌνλ€. 2. DFS λ₯Ό μμ©νμ¬, μ¬μ΄ν΄μ΄ μκΈ°λμ§ μ¬λΆλ₯Ό κ²μ¬νλ©΄ DeadLock μν©μ 미리 κ²μΆν μ μλ€. DeadLock μ κ²½μ°, κ°λ° λ¨κ³μμλ λμ€μ§ μμΌλ, λ§μ λΌμ΄λΈ μλΉμ€λ₯Ό νλ©΄ κ²μΆλλ κ²½μ°κ° λ§λ€. ꡬ쑰μ μΌλ‘λ λ°λλ½μ΄ 걸릴 λ‘μ§μ΄ μμμλ, μ μμ μκ° λ§μ§ μμ λ°λλ½μ΄ κ±Έλ¦¬μ§ μμ μ μλ€. μ΄λ° νμ΄λ° μ μΈ μ΄μμ μμ‘΄νμ§ μκ³ , DFS λ°©μμΌλ‘ μ¬μ΄ν΄μ΄ μλμ§λ₯Ό κ²μ¬νμ¬, λ°λλ½ λ¬Έμ λ₯Ό 미리 λ°©μ§ν μ μλ€. λ°λλ½μ μ‘λλ€λ κ²μ, κ²°κ΅ λ½μ μ‘λ λ°©μμ μμ΄ μ¬μ΄ν΄μ΄ νμ±λλμ§λ₯Ό νλ¨νλ κ²κ³Ό λμΌνκΈ° λλ¬Έμ΄..