반응형

컴퓨터 공학/C++ 31

[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(..

[C/C++] 윈도우즈 운영체제에서 맥 주소 가져오기

아래의 코드는 윈도우즈 환경에서 "Windows.h" 헤더파일에 포함된 API를 사용하여 장치의 맥 주소를 출력하는 과정을 나타냅니다. 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 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 #include #include #include #include #pragma comment(lib, "iphlpapi.lib") IP_ADAPTER_INFO* GetNetworkAdaptersInfo() { DWORD dwBufLen = 0; DWORD dwStatus = GetAdaptersInfo(NULL, &dwBu..

[c/c++] Boost 주요 기능 정리

boost의 주요 기능들과 그 기능들을 활용하여 구현한 채팅 프로그램에 대해 설명드리겠습니다. 주요 기능들은 다음과 같습니다. Boost::thread Boost::bind boost::function boost::chrono 스마트 포인터 boost::signal boost::mutex boost::asio boost::timer 먼저, 스레드에 대해 설명드리겠습니다. 스레드는 프로세스 내에서 실행되는 흐름의 단위라고 하는데요, 멀티스레드를 사용함으로써 프로세스의 처리성능을 높일 수 있는 장점이 있습니다. boost에서 제공하는 스레드를 사용하기 위해 boost/thread.hpp를 선언해야 하며, 다른 클래스와 다르게 스레드는 복사가 불가능하다는 특징이 있습니다. 스레드를 사용하는 예제가 다음의 코드..

C언어 - rand()를 이용한 난수 생성

N, nrData : 데이터 개수 RDMAX : rand()의 최대 값 maxRange : 생성할 난수의 최대 값 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 34 35 #include #include #include #define N 10000000 #define RDMAX 32767 void main() { //균일분포 데이터 생성 srand(time(NULL)); int* arr = (int*)malloc(sizeof(int) * N); int nrData = N; int maxRange = 1000000; int scaleFactor = 1; if (maxRange > RDMAX) ..

반응형