: 메모리 풀이란, 동적할당한 메모리들을 만들어 Pool에 저장한 후, 필요할 때 Pool에서 꺼내 사용하고 반납하는 형식을 말한다. 이런 방식을 사용하는 이유는 동적할당 함수, 즉 malloc이나 new을 호출하는 시간을 줄여, 속도 향상을 꾀하기 위해 사용합니다. 메모리 풀의 형태를 두 가지정도 배웠는데, 여기는 첫 번째 형태를 적어보겠습니다. 메모리 풀의 형태 [Header][Data]가 하나의 형태를 가집니다. 메모리 헤더를 다는 이유는 Data의 크기를 알아내기 위해 사용합니다. 그래서 Pool의 형태는 [Header][Data][Header][Data][Header][Data] 식으로, Header를 꺼내 사용하는 형식으로 되어있습니다. 메모리 Pool - Header struct Memory..
C++에서 우리가 자주 쓰는 vector, map, queue 등, STL 자료구조는 원래 지정하지 않아도 자동으로 동적할당과 해제까지 다 해주는 아주 편리한 함수입니다. 여기서 이 자동으로 동적할당과 해제를 해주는 Allocator를 본인이 직접 작성하여 넣어줄 수도 있습니다. vector를 호출할 때 인자를 살펴보게 되면 다음과 같이 두개의 인자를 받을 수 있는데, 첫번째는 클래스, 두 번째가 바로 Allocator 입니다. template class vector { // varying size array of values 이 allocator는 필수로 하는 함수가 두가지 있는데 그것은 allocate 와 deallocate 입니다. 다음은 강의의 예시입니다. 다음과 같이 allocate와 deall..
오늘은 virtualAllloc과 virtualFree 함수를 공부하였습니다. 자세한 내용은 아래는 Microsoft 공식문서에 있는 두 함수의 원형입니다. 아래 더보기는 각 함수에 대한 설명입니다. LPVOID VirtualAlloc( [in, optional] LPVOID lpAddress, [in] SIZE_T dwSize, [in] DWORD flAllocationType, [in] DWORD flProtect ); 더보기 첫 번째 인자 - 먼저 공통적으로 첫 번째 인자는, 시작할 주소 또는 해제할 주소의 시작지점을 인자로 받습니다. 시작 지점이 없이 랜덤한 공간을 할당받을 경우 NULL을 입력하면 됩니다. 두 번째 인자 - 두 번째로, 할당할 사이즈의 크기입니다. 세 번째 인자 - Alloc할때..
placement 문법이란, 내가 malloc등으로 생성한 동적 memory를 type 캐스팅을 통해 클래스로 변환하였을 경우, 생성자 호출이 되지 않는데 이러한 상황에서 생성자를 호출하는 방법이다. 정리 void* ptr = malloc(size) -> ptr을 static_cast 등을 통해 형변환 후 new(ptr)클래스이름(인자) 로 생성자 호출(초기화) 고로 내가 원하는 데이터 영역을 할당하여 사용할 수 있게 된다. (굳이 malloc 말고, 이미 만들어진 데이터 공간도 크기만 맞다면 가능) ※ std::forward 같은 경우에는 args로 들어온 값을 인자로써 들어갈 수 있도록 해주는 함수입니다. template T* xnew(types... args) { // placement new vo..
게임 서버 공부를 다시 시작하면서, 먼저 메모리 구조와 포인터를 조금 이해해보고자 하였습니다. 그래서 제일 먼저 shaerd_ptr을 구현을 하려고 합니다. 참고는 memory에 있는 shared_ptr의 구조를 살짝 참조하여 만들었고, 추가적인 형태는 따로 다시 만들어볼 예정입니다. 아래는 코드입니다. 먼저 template를 사용해서 원하는 형태로 생성 할 수 있도록 하였습니다. 추가적으로 활용할만한 operator 함수들을 넣을 예정입니다. template class Shared_Ptr { public: Shared_Ptr(const Ref_Count* ref); ~Shared_Ptr() { Release(); } // 복사 생성자 Shared_Ptr(const Shared_Ptr& tmp) noex..
이번 내용은 단순하게 후에 코딩 때, 사용할 STL들이이나 함수를 좀 더 편하게 찾기 위해서 만든 글입니다. 내용은 제가 이해한 것을 바탕으로 적은 것이므로 틀릴 수도 있습니다. 만약 틀린 내용이 있다면 댓글 달아주시면 감사하겠습니다. ㅎㅎ new, delete : 동적할당 ifstream, ofstream, std::stringstream(문자열 스트림) : 파일 입출력 template : 템플릿, 템플릿 메타 프로그래밍도 존재 std::vector, std::list, std::deque : 자료구조 1 std::set, std::map (unordered도 존재) : 자료구조 2 std::algorithm : 알고리즘(sort, remove) [전달받을내용](인자) { 내용 } : 람다 형식 std..
사이트 : https://modoocode.com/271 씹어먹는 C++ - modoocode.com Atomic - CAS(Compare_And_Swap) 의사 코드 (한줄로 실행) if(_locked == expected){ exptected = _locked; _locked = desired; return true; } else{ expected = _locked; return false; } 이 코드의 핵심은 SpinLock입니다. SpinLock이란, while로 반복문을 돌면서 내가 Lock을 잡을 수 있는지 확인하는 방식의 Lock이다. Lock을 걸때는 Atomic의 compare_exchange_strong을 사용하여 _locked가 false, 즉 아무도 Lock을 잡지 않은 상태일때 ..
강의 : https://modoocode.com/252 씹어먹는 C ++ - modoocode.com 위 강의의 문제를 풀어본 내용입니다. 다만, 아직 촌수 계산은 미구현 상태입니다. 예시 더보기 #include #include #include #include #include "Member.h" int main() { std::shared_ptr m0 = std::make_shared("A"); std::shared_ptr m1 = std::make_shared("B"); std::shared_ptr m2 = std::make_shared("C"); std::shared_ptr m3 = std::make_shared("D"); std::shared_ptr m4 = std::make_shared("E");..
- Total
- Today
- Yesterday
- 개발
- 지뢰찾기
- 레지스터
- c++
- 링크드 리스트
- 보안
- 더블버퍼링
- Select모델
- STL
- Dreamhack
- 자료구조
- 정보보안
- 멀티쓰레드
- 스레드풀
- queue
- 컨퍼런스
- 드림핵
- 시스템보안
- 워셜알고리즘
- 고양이
- 백준
- 야경
- BFS
- 학교
- 인제대학교
- 알고리즘
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |