2025/03 28

메모리 관련

CPU의 메모리 정렬CPU가 메모리를 효율적으로 읽을 수 있도록 데이터를 특정 크기 단위로 정렬하는 것이다.보통 2의 배수 byte단위로 정렬하는데, 1,2,4,8...로 정렬된다. 정렬되지 않은 데이터를 읽을려고 하면 컴파일러에 따라서는 바로 끊어버릴 수도 있다.정렬되어있지 않다면 데이터들을 여러번에 걸쳐서 읽어들여야 하기 때문에 그만큼 cpu의 효율이 감소한다.메모리가 정렬되면, 메모리 단위가 규칙적으로 바뀌게 되는데, 16바이트로 정렬된다면 마지막 주소값은 0이 된다.0001 0000 = 16바이트/ 8바이트로 정렬되어 있다면 끝자리가 8아니면 0일 것이다. address boundary값이 정렬하고 싶은 값의 배수가 되지 않는다면 CPU가 그 주소값에 접근하는데 추가적인 비용이 들기도 하고, 하드..

MMOServer 2025.03.27

Smart_Pointer(C++)

전에 포스팅한 RefCounting과 스마트 포인터는 RefCounting을 상속받는 클래스에만 사용할 수 있고, 순환 문제를 해결할 수 없다. SmartPointer에는 총 3종류가 있는데, 각각 unique_ptr, shared_ptr, weak_ptr이 있다.unique_ptr는 복사생성자, 복사연산자 등 복사연산이 delete되어 있는 포인터라고 생각하면 된다. (이동연산자는 가능) 1. RefCountBlock shared_ptr는 ptr가 가리키는 객체와 RefBlock이라는 RefCount를 관리하는 메모리가 같이 할당된다.RefCount는 ptr을 가리키는 shared_ptr의 개수만큼 늘어나고, RefCount가 0이되면 ptr가 가리키는 객체를 delete로 소멸시킨다.RefCountB..

MMOServer 2025.03.22