C++

· C++
c++ STL에서 가장 많이 쓰이는 컨테이너 중 하나인 std::vector의 복사는 효율적일까?다음 코드를 실행시킨다 했을때using namespace std;class A{public: A() { cout temp1 = vector(10); vector temp2 = temp1;}temp2에 temp1을 복사 할 경우 그림과 같이 요소의 개수 N(위 예제에서는 5)번 만큼의 복사생성자가 호출된다.즉, vector의 복사생성자는 N개의 요소들을 각각 순차적으로 복사하는, O(N)의 시간복잡도를 갖게 된다. 궁금한 점은 vector는 연속된 메모리인데  비효율적으로 왜 모든 요소들을 각각 복사하는걸까? 연속된 메모리 구간을 통채로 복사해서(이를테면, memcpy와 같은) 복사하는게 아니라 각각 복사하는..
· C++
Struct구조체 Struct의 멤버 변수를 메모리에서 CPU로 읽을 때 한번에 읽을 수 있도록, 컴파일러가 레지스터의 블록, Word의 크기(64비트라면 8바이트, 32비트라면 4바이트)에 맞춰 바이트를 패딩시켜주는 최적화 작업을 수행한다. 만약 struct x{ char a; int b; char c;}struct x data;위 구조체의 메모리 크기인 sizeof(data)는 6바이트가 아닌 12바이트이다. 컴파일러가 구조체를 구성하는 멤버들을 가장 크기가 큰 멤버 자료형(여기서는 int)의 배수가 되도록 정렬했기 때문이다. 이 정렬을 위해 의미없는 바이트들을 더해 패딩해준 것이고, a와 c 뒤에 3바이트씩 패딩이 추가된다. struct x{ char a; char c; int b;}하지만 다음과 ..
· C++
서버와 DB를 연동하기 위해 MariaDB를 사용했는데, 생각보다 c++ 연동에 대한 정보가 없어 직접 DOCS를 보면서 사용법을 정리해보았다.본 글은 Visual Studio 2022, MariaDB 11.3 version을 기준으로 작성되었다. Visual Studio 설정1. MySQL/MariaDB c/c++ connector를 다운https://mariadb.com/docs/server/connect/programming-languages/cpp/ 2. Visual Studio에서 헤더파일 설정MySQL/MariaDB를 사용하고자 하는 프로젝트에서속성 -> C/C++ -> 일반 -> 추가 포함 디렉터리 추가 포함 디렉터리에 설치한 c/c++ connector에 포함된 헤더파일 경로를 지정해준다...
· C++
winapi를 사용하면서 winapi 함수들에 사용된 stdcall에 대해 찾아본 내용을 정리해보았다. 함수의 호출을 이해하기 위해서는 우선 콜 스택과 몇가지 레지스터에 대해 이해하고 있어야 한다. 콜 스택(Call stack) 함수 호출 시 스택에는 함수의 매개변수 + 함수 본체에서 사용하는 지역변수 + 함수 호출 후 돌아갈 반환 주소 등이 저장되어 있다. 이렇게 스택 영역에 차례대로 저장되는 데이터들을 스택 프레임(Stack Frame)이라고 한다 이때 함수마다 프레임의 크기는 다르기 때문에 함수 호출이 끝난 후, 해당 함수가 돌아가기 위해서는 바로 이전 프레임의 포인터 값을 가지고 있어야 함. 이러한 정보는 레지스터에 담아 저장해놓는데 이 레지스터들은 EBP, ESP가 있다. EBP(Extended..
멍텅구링
'C++' 카테고리의 글 목록