[c++] struct

C++/Tips / / 2021. 1. 26. 15:42

=> 다양한 데이터 유형을 결합해서 하나의 변수로 구조화하는 것

struct PERSON // PERSON이라는 Struct Type 선언
{
	int a;
    char b;
} family_member; // Person 구제초에ㅢ 이름을 지정


//Template 사용하는 경우
template<typename T_key, typename T_value> // 똑같이 template를 사용하고 사용
struct Node
{
	Node* left;
	Node* right;
	Node* parent;
	T_key key;
	T_value value;
	Node() : left(nullptr), right(nullptr), parent(nullptr), key(NULL), value(NULL) {}
};

 

1. 구조체 네이밍

=> 구조체 명은 모든 글자를 대문자로 기입[Class의 경우 앞글자만 대문자]

struct COMPUTER
struct TV

class Electronics
class Personal

 

2. 구조체 vs class

=> 공통점

    -> 객체를 묶어서 하나의 객체처럼 사용함

=> 차이점

    -> 선언의 차이.

    -> Class는 접근제어 지시자를 선언하지 않을시 default로 private

    -> Struct는 접근제어 지시자를 선언하지 않을시 default로 public

 

3. 구조체 포인터

=> 구조체도 포인터를 생성할 수 있음

=> 생성의 방법은 new와 malloc이 존재함

struct NODE
{
	~
};

int main()
{
	NODE* node_ptr = (NODE*)malloc(sizeof(NODE)); // 메모리 할당 및 구조체 포인터 선언
    struct NODE node_ptr2 = new NODE; // 동적할당 및 구조체 선언
    free(node_ptr);
}

 

4. 구조체의 패딩(padding)

=> 구조체는 메모리 할당 시, 속도 향상을 위하여 크기가 큰 멤버변수를 기준으로 멤버변수의 메모리 크기를 맞춤

=> 채워넣을때, 중간 빈 공간에 들어간 것을 padding bit라고 표현

=> os 32bit는 4byte packing / 64bit는 8byte padding이 빠름
=> 아래 사진에서, c 뒤의 2byte가 padding bit

bool(1byte - 3padding) / uint(4bypte) / bool(1byte - 3padding)

'C++ > Tips' 카테고리의 다른 글

[c++/c#]Region  (0) 2021.02.09
[c++]SmartPointer  (0) 2021.02.02
[c++]Typename  (0) 2021.01.26
[c++]auto  (0) 2021.01.19
[c++]volatile  (0) 2021.01.12
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기