본문 바로가기

메모리관리(스마트포인터...)5

stompAllocator, 가상메모리 가상메모리, 우선 stompAllocator를 보기전에 가상메모리를 살펴보겠습니다. 일반적으로 코딩에서 사용하는 메모리 주소는 물리적 주소가 아닌라 랩핑된 가상메모리 주소이다. 가상 메모리에도 정책을 둘 수 있는데 만약 4GB를 할당하면 메모리를 관리할 때 페이지 단위로 관리를 한다 비유를하면 아파트 분향 모형처럼 생각하는 것이 페이지이다. 윈도우 PAGE는 기본적은 4KB로 고정되어있습니다. VirtualFree를 사용하면 가상메모리 부분을 FREE하는 것이 아니라 실제로 할당 받은 메모리 부분을 지우는 것이라서 메모리 오염을 방지할 수 있다. stompAllocator stompAllocators는 언리얼에서도 사용한다고 알고있습니다. 실제로 물리적메모리를 할당하거나 지워서 오염된 메모리영역을 건드리.. 2022. 4. 10.
stompAllocator 메모리 오염 댕글링 포인터, use -After - free 캐스팅관련 메모리 오염 Player* p = new Player(); Knight* k = static_cast(p); // p는 처음부터 플레이어로 만들어졌던 것... k->hp = 200; // 엉뚱한 곳을 접근하는 것이다...!! 위의 소스에서 Knight가 Player를 상속하는 구조이다. 여기서 p는 원래 플레이어였기에 캐스팅해서 k로 넣는 것은 잘못된행위이다.. 2022. 4. 7.
Allocator 메모리 풀을 사용할려는 이유 메모리를 조금만 떼서 가져온다면 다시 커널레벨로 들어가서 메모리를 가져와야한다 이렇게 되면 컨텍스트 스위칭 비용이들어간다.. 메모리가 짜잘하게 메모리를 요청하면 만약 사용한 메모리의 크기가 다를 수도 있다 예를들면 [a] [ ][b][ ][].. 이상황에서 a, b메모리를 해제한다면 , 쪼개진 상태로 메모리가 남아있다 근데 a + b보다 작지만 a, b 각각보다는 큰 메모리를 할당해야한다면 영역이 분산 되어있어서 문제가 발생한다. ## Allocator (메모리 할당 정책) - 메모리 할당정책에서.. new도 오버라이딩을 해서 사용할 수 있다 void* operator new(size_t size) //size는 Knight의 사이즈를 말한다. { cout 2022. 4. 7.
스마트포인터 (weak_ptr, unique_ptr, share_ptr) RefCounting부분 #include "pch.h" #include #include "CorePch.h" #include #include #include #include #include "ThreadManager.h" #include "RefCounting.h" #pragma once /*--------------- RefCountable ----------------*/ class RefCountable { public: RefCountable() : _refCount(1) { } virtual ~RefCountable() { } int32 GetRefCount() { return _refCount; } int32 AddRef() { return ++_refCount; } int32 ReleaseR.. 2022. 4. 7.