반응형

c++ 26

C++ Printf 검사 프로그램

C++에서 printf() 함수를 사용하면 원하는 변수를 파라미터로 전달하여 원하는 포맷으로 문자열을 출력할 수 있다. string name = "Kim";printf("My name is %s", name.c_str()); 여기서 파라미터로 값을 전달하는 부분을 %d, %s와 같은 포맷 지정자 (format specifier)를 통해 타입과 위치를 지정할 수 있고, 쉼표를 통해 뒤에 파라미터를 전달해주면 된다. 문제는 포맷 지정자의 개수와 실제 전달하는 파라미터의 개수가 사용자의 실수로 얼마든지 달라질 수 있다는 점이다. string name = "Kim";printf("My name is %s and my hobby is %s\n", name.c_str()); // INFO: 프로세스 종료printf..

CentOS 7에서 GCC 8 설치하는 법

[문제 소개] 현재 회사에서 C++ 기반의 제품을 개발하여 출시하였는데, 프로젝트가 약 5년 전에 시작된 제품이다 보니 C++11 기반으로 작업이 진행되고 있었습니다. 이 제품은 Windows와 CentOS를 대상으로 개발되었습니다. 이후 회사에서 Visual Studio 2015를 사용하게 되면서 Windows에서는 자연스럽게 C++14를 사용하였지만, CentOS는 그대로 C++11를 사용하고 있었습니다. 이때 사용한 GCC 버전이 4.8.5 였는데, 이 버전은 C++11까지만 정식으로 지원하고 있었습니다. 이에 따라, Windows와 CentOS의 C++ 버전이 지금까지 계속 다른 상태로 개발이 되었는데, 최근에 이로 인한 이슈가 적잖이 발견되어 CentOS의 C++ 버전을 14로 변경할 필요성을 ..

[C++] vector 컨테이너 반복문 종류별 성능

vector 컨테이너에 대한 반복문을 수행하는 방법은 1) 범위 기반 for 문, 2) 인덱스 접근 for 문, 3) 데이터 배열 취득 후 인덱스 접근 for문, 4) 반복자 사용 for 문 있다. 각각의 방식에 대한 성능이 궁금해져서 각 방식에 대한 성능을 측정해보기로 하였다. 데이터 크기만큼 int형 원소를 갖는 vector를 생성한 후 각 방식대로 반복문을 수행하면서 각 원소에 1이라는 값을 대입하였다. 데이터 크기를 1024, 2048, 4096, ..., 16777216 과 같이 1024부터 두 배씩 증가하여 각 방식의 성능을 측정하였며, 이 작업을 열 번 반복하여 평균을 내었다. ​ 소스코드는 다음과 같다. #include #include #include #include #include #in..

[C++] 구조체 정렬 크기 조절하기

C/C++에서 다음과 같이 구조체를 정의할 경우 구조체의 크기는 다음과 같습니다. struct PlayerData{ int32_t age; //4 int16_t height; //2 }; void main() { printf("PlayerData 크기: %d\n", sizeof(PlayerData)); } 크기: 8 이는 성능의 최적화를 위해 컴파일러에서 구조체의 크기를 가장 큰 데이터인 int32_t의 배수로 정의했기 때문입니다. 그러나, 네트워크를 통해 바이트 배열 데이터를 받아 바로 구조체에 넣고 싶다면 구조체의 크기가 정의된 데이터 크기와 일치해야 합니다. 이럴 때, 다음과 같이 구조체의 정렬 크기를 조절할 수 있습니다. #pragma pack(push, 1) struct PlayerData{ i..

vector와 array의 처리 성능 높이는 방법 (실험)

C++에서 일반적으로 크기가 정해지지 않은 배열을 사용하기 위해 vector를 사용하고, 크기가 정해진 배열을 사용하기 위해 array를 사용합니다. 그리고 vector와 array의 원소를 for문을 통해 접근할 때 다음과 같은 코드를 작성합니다. vector vec; int length = vec.size(); for (int i = 0; i < length; i++) { vec[i] = i; } 그리고 문득 vector의 인덱스 접근 방식과 일반 배열 []의 처리 성능이 얼마나 차이나는지 궁금하여 반복문으로 값을 할당하는 실험을 진행하였습니다. 시간 측정 도구는 제가 이전에 작성한 HourMeter 클래스 객체를 사용하여 진행하였습니다. vector와 array 그리고 일반 배열[]을 크기 1,00..

C++ exit()와 quick_exit()의 차이점

exit() -싱글스레드 환경에서 프로그램 종료 시 사용된다. -exit()를 호출하더라도 프로그램이 바로 종료되지 않고 다음의 경우 객체의 소멸자가 호출된다. --전역 정적 클래스 객체를 생성한 경우 --전역/지역 싱글톤 동적 객체를 사용한 경우 (클래스 정적 변수에 할당) quick_exit() -exit()를 멀티스레드 환경에서 사용하면 글로벌/정적 객체들은 스레드 종료 없이 소멸되려고 한다. -멀티스레드 환경에서 정상적으로 에러코드를 반환하고 프로그램을 종료하기 위해 quick_exit()를 호출해야 한다. -quick_exit() 호출 시 각 객체의 소멸자를 호출하지 않는다. --위의 exit()에서 소멸자가 호출되는 경우에도 quick_exit()는 소멸자 호출없이 바로 종료된다. abort(..

반응형