[CPP] Universal Reference & forward (모두의 코드 분석)
CPP2025. 5. 31. 18:10[CPP] Universal Reference & forward (모두의 코드 분석)

https://modoocode.com/228" data-og-description="모두의 코드 씹어먹는 C++ - 작성일 : 2018-03-27 이 글은 50581 번 읽혔습니다. 등에 대해 다룹니다. 안녕하세요 여러분! 지난번의 우" data-og-host="modoocode.com" data-og-source-url="https://modoocode.com/228" data-og-url="https://modoocode.com/228" data-og-image=""> 씹어먹는 C++ - 모두의 코드 씹어먹는 C++ - 작성일 : 2018-03-27 이 글은 50581 번 읽혔습니다. 등에 대해 다룹니다. 안녕하세요 여러분! 지난번의 우modoocode.com위 글에서 좀 내리다 보면 perfe..

[CPP] std::move와 const제약
CPP2025. 5. 29. 17:31[CPP] std::move와 const제약

std::move와 const 제약에 다룬 글이다. 이동생성자와 perfect fowarding과 밀접한 연관이 있는데 perfect forwarding은 다음 글에서 다루도록 하겠다. 우선 이동생성자(및 이동대입 연산자)가 무엇인지 부터 알아보자.MSDN을 보면 '이동 생성자를 사용하면 rvalue개체가 소유한 리소스를 복사하지 않고 lvalue로 이동할 수 있습니다.' 라고 되어 있다. 게임에서 예를 들어보면 level_a에 player가 있고 이제 이 player가 level_b로 이동했다고 해보자.그럼 level_b에서 player에 대한 정보를 싹다 복사해서 level_b에 동일한 데이터로 player를 생성할 수 있다.근데 player가 10MB의 용량을 가진다면 level_b로 이동하는데 ..

Stack Frame과 함수 호출 규약(__stdcall)
CS2024. 4. 28. 22:36Stack Frame과 함수 호출 규약(__stdcall)

스택 프레임이란?쓰레드의 실행 문맥(Context)를 제공하는 스택의 추상화입니다.다른 말로는 함수의 호출 정보를 저장하는 자료구조이고, 이 자료구조는 스택형태로 되어 있습니다.스택 프레임에는 함수로 전달되는 매개 변수(인수)와 지역변수, 함수 호출을 마치면 돌아올 복귀 할 주소 등의 정보들이 들어갑니다. 스택프레임 형성 과정이런식으로 호출을 하는 경우 대~충 아래처럼 스택이 쌓입니다.sp(stack pointer)이라는 레지스터는 변수가 하나씩 할당될 때마다 증가하는데 증가하면서 다음 변수가 할당될 메모리 위치를 가르키게 됩니다.함수가 호출이 종료되고 나서 돌아갈 곳을 기억하기 위해서 fp(frame pointer) 라는 레지스터를 사용을 합니다.즉, sp가 돌아갈 위치를 fp가 기억을 해주는 방식입니..

[백준] 1525 퍼즐 C++
알고리즘/백준2024. 4. 15. 11:04[백준] 1525 퍼즐 C++

https://www.acmicpc.net/problem/1525 1525번: 퍼즐 세 줄에 걸쳐서 표에 채워져 있는 아홉 개의 수가 주어진다. 한 줄에 세 개의 수가 주어지며, 빈 칸은 0으로 나타낸다. www.acmicpc.net 후기 조금 어려웠던점 점은 원본 상태에 대한 상태를 변경해야한다는 부분을 어떻게 처리할 줄 몰랐었습니다. 기존의 조금 까다롭다고 생각되는 문제들은 2차원 배열을 탐색하는 것이 아니라 값 자체를 탐색하는것에 추가적으로 특정 상태를 기억한다음에 탐색을 이어 가는데 해당 문제는 이 두가지 가 모두 포함된 상태에서 탐색을 하는 대상자체와 방문 표시를 하는 부분에 대한 신경도 썻어야 하는 문제입니다. 풀이 "103425786"에 대한 상태를 문자열로 관리를 해줍니다. '0'이 있는 ..

[CPP] static_assert
CPP2024. 2. 7. 23:14[CPP] static_assert

기존의 C++에 존재하는 assertion을 발생하는 키워드는 #error 전처리기와 assert 메크로를 통해 발생시킬 수 있습니다. Assert동적으로 배열을 할당 할 때 배열 사이즈는 양수이여야 하기 때문에 이를 assert를 통해서 검증할 수 있습니다.#include #include using namespace std;void foo (int age){ // assert를 이용한 유효성 확인 assert(age > 50); int* p = new int[age];}int main(int argc, char* argv[]){ foo(26); return 0;} 위와 같이 assert를 이용한다면 오류가 발생하면 개발자에게 프로그램이 다양한 정보(Call Stack, 발생 위치 등)를 알려주..

[C++] 스마트 포인터
CPP2023. 9. 14. 10:20[C++] 스마트 포인터

이번글은 C++의 스마트 포인터에 대한 글입니다. 스마트 포인터 C++이후에 나온 언어들을 보면은 C#, JAVA 등등은 '가비지 컬렉터'라고 불리는 '자원 청소기'가 내장되어 있습니다. 프로그램 상에서 더이상 사용하지 않는 자원들을 자동으로 해제 해주기 때문에 사용자가 굳이 메모리 해제를 일일히 신경쓰면서 작업할 필요가 없습니다. 하지만 우리의 C++의 경우 이딴건 지원을 하지 않습니다! (이게 매력인거 같습니다) 그래서 스마트 포인터를 사용하는데 스마트 포인터를 사용하는 가장 큰 이유는 'RAII'때문입니다. Resource Acquisition Is Intialization이라는 말인데요 '오브젝트와 자원 획득과의 초기화를 같이한다(생명주기를 같이한다)'라는 말입니다. (따라서 모든 스마트 포인터는..

[C++] union (DX Matrix)
CPP2023. 9. 4. 12:14[C++] union (DX Matrix)

이번글은 union 키워드에 대한 간단한 글입니다! union union이란? A union is a special class type that can hold only one of its non-static data members at a time. 라고 합니다! 해석하면 한번에 하나의 non-static 데이터 멤버를 가질 수 있다고 합니다. 약간 카멜레온을 생각해주시면 될거같습니다. 어쩔때는 A였다가 어쩔때는 B였다가 하는 식으로요(저는 이렇게 이해했습니다) 아니면 키워드 그대로 '연합체'느낌으로 받아 드리셔도 될거같습니다. 우리는 하나의 연합체다ㅎㅎ 그래서 메모리도 공유한다. 또한 union은 다른 데이터 멤버중에 가장큰 크기를 가지는 데이터 타입의 크기를 할당받습니다. 바로 예시코드를 보면서 이..

[자료구조] 뻐꾸기 해싱
자료구조2023. 8. 27. 11:26[자료구조] 뻐꾸기 해싱

해시 테이블 이번글은 뻐꾸기 해싱(Cuckoo Hashing)에 대한 글입니다! 해시 테이블의 핵심은 '해싱'입니다. '해싱'이란 각각의 주어진 데이터를 최대한 고유한 숫자 값으로 표현하여 나중에 해당 데이터의 유무를 확인하거나 해당 데이터에 대응하는 원본 데이터를 추출 하는 작업입니다. 그리고 주어진 데이터로 부터 고유한 숫자 값을 계산하는 함수를 '해시 함수'라고합니다. 그래서 해시 함수를 무엇을 정하느냐에 따라 해시 함수를 통해 나오는 '해시 값'이 각기 달라지겠지만 가장 일반적인 방법으로는 입력 받은 데이터 : x 가 있을 때 (x % n)으로 '해시 값'을 반환합니다. 이런 방법으로 해시 맵을 구성하여 데이터를 넣다보면 n이 7이라 가정을 했을 때 x가 3, 10 순으로 들어오게 된다면 (x %..

image