2020 이전/C++ 19

vector 키우기

벡터에는 실제 원소 개수의 개념인 size와 미리 배열을 잡아두는 크기인 capacity가 있다. 가장 처음 벡터의 size는 0 capacity도 0 max_size() = 2^30 -1 _OldCapactiy가 715,827,882 부터는 1개씩 자라는 형태로 재할당이 이루어지고 원소 4개까지는 +1씩 재할당이 일어나며 원소 5개 이후부터는 _OldCapacity의 1.5배씩 자라기 시작한다. 재할당이 일어날 때마다의 capacity 변화

2020 이전/C++ 2020.01.29

스스마트포인터맛 궁금해 허니 궁금해깨물면 메모리 릭이 나는 그맛

제목 곧 내용 스마트 포인터 궁금해 깨물면(서로 참조하면) 메모리 릭이 나는 그 맛 스마트 포인터 C++에서 메모리에 대한 참조와 소유권을 관리하는 특별한 클래스. 메모리에 대한 참조와 소유권을 단 하나만 허락하는 unique_ptr, 메모리에 대한 참조와 소유권을 레퍼런스 카운트로 관리하는 shared_ptr, 메모리에 대한 참조를 허락하지만 소유는 하지않는(레퍼런스 카운트를 올리지 않는) weak_ptr이 있다. 코드 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 32 33 #include #include using namespace std; class circular { public: circul..

2020 이전/C++ 2019.11.06

vector대 list

퀘스트를 작업할 때, list 컨테이너로 퀘스트 목록을 관리하고 있었는데 갑자기 찾아온 뇌절 vector를 쓰면 어떻게 될까? 과연 어떻게 될까? 요약 int 자료형 앞에서 부터 삭제할 때 4만개~5만개부터 list가 빠름 int 10000개 기준으로 앞의 원소를 제거하는 속도는 16byte까지 vector가 우세 string 넣는 순간부터 심각하게 늦어짐 순수 int로 32byte 채우고 int char섞어서 32byte 채운 구조체로 시험해 봤을 때 성능 차이 거의 없음 결론 string을 제거하는게 best. string을 썼는데 자주 정렬할 때 list를 사용. 그래도 쓸거면 역시 string 대신 char 써라 int 자료형 Quest(실제 썼던 자료형) (string기본적으로 3개 들어있다) ..

2020 이전/C++ 2019.10.11

CPU도 구라를 치고 C++도 구라를 친다

최적화에서 중요한점 1. 실제 컴퓨터의 메모리 하드웨어는 명령 실행 속도보다 매우 느리다 2. 메모리는 byte 단위로 접근 되지 않는다. + 유한한 용량을 갖는다. 3. 프로세서는 하나의 명령어를 Fetch->Decode->Execute->결과 반영 의 단계를 나누는데, CPU는 단계수만큼 명령어를 동시에 실행할 수 있다. 1번 명령어가 명령어 해석(Decode)로 들어가면 2번 명령어가 Fetch단계에 진입하는 방식으로 CPU는 두개 이상의 명령어 주소를 가지고 있을 수 있다. 실제로 여러개의 명령을 수행하지만 결과 반영을 순차적으로 해주는것때문에 명령이 순차적으로 실행되는 것처럼 작동되어 보이는것-> 대표적인 프로세서의 구라인데 멀티스레딩에서 자기 자신의 프로그램은 순서대로 실행되는 것처럼 보이나 ..

2020 이전/C++ 2019.08.08

해시 버켓 사이즈 비교 실험

Release mode 매 문자열마다(길이 별로 달라질 때) 해쉬 테이블 생성시, Hash bucket 사이즈 1000 매 문자열마다(길이 별로 달라질 때) 해쉬 테이블 생성시, Hash bucket 사이즈 10000 모든 문자열(길이 통합)에 하나의 해쉬 테이블 생성시, Hash bucket 사이즈 1000 모든 문자열(길이 통합)에 하나의 해쉬 테이블 생성시, Hash bucket 사이즈 10000 버켓 사이즈 2000 : 버켓 사이즈 500:

2020 이전/C++ 2019.07.06