Program Language/C & C++

[C++] 구조체의 필드(field)

야곰야곰+책벌레 2022. 1. 4. 10:55
728x90
반응형

이진 변수를 나타내기 위해 전체 byte(char or bool)를 사용하는 것은 고급스러워 보이지만 char는 C++에서 독립적으로 할당되고 주소 지정될 수 있는 가장 작은 객체다. 그러나 구조체의 필드와 같이 여러 개의 작은 변수를 함께 묶는 것이 가능하다. 필드는 종종 bit 필드라고 한다. 구성원은 점유할 비트 수를 지정하여 필드로 정의된다. 이름 없는 필드가 허용된다. 그것들은 명명된 필드의 의미에 영향을 미치지 않지만 일부 machine-dependent 한 방식으로 레이아웃을 개선하는 데 사용할 수 있다.

struct PPN { // R6000 Physical Page Number
	unsigned int PFN : 22; // Page Frame Number
	int : 3; // unused
	unsigned int CCA : 3; // Cache Coherency Algorithm
	bool nonreachable : 1;
	bool dirty : 1;
	bool valid : 1;
	bool global : 1;
};

이 예는 또한 필드의 다른 주요 용도를 보여준다. (외부에서 부과된 레이아웃의 일부 이름 지정) 필드는 정수 또는 열거 유형이어야 한다. 필드의 주소를 가져올 수 없다. 그 외에는 다른 변수와 동일하게 사용할 수 있다. bool 필드는 실제로 단일 비트로 표시될 수 있다. 운영 체제 커널이나 debugger에서 PPN은 다음과 같이 사용할 수 있다.

void part_of_VM_system(PPN∗ p)
{
	// ...
	if (p−>dirty) { // contents changed
		// copy to disk
		p−>dirty = 0;
	}
}

놀랍게도, 필드를 사용하여 여러 변수를 single byte로 압축한다고 해서 반드시 공간이 절약되는 것은 아니다. 데이터 공간을 절약하지만 대부분의 시스템에서 이러한 변수를 조작하는데 필요한 코드 크기가 증가한다. 이진 변수가 비트 필드에서 문자로 변환될 때 프로그램이 크게 축소되는 것으로 알려져 있다. 또한 일반적으로 필드에 액세스 하는 것보다 char or int에 액세스 하는 것이 훨씬 빠르다. 필드는 단순히 비트 논리 연산자를 사용하여 word에서 정보를 추출하고 word의 일부 정보를 삽입하기 위한 편리한 축약형이다.

728x90
반응형

'Program Language > C & C++' 카테고리의 다른 글

[C++] Enumerations  (0) 2022.01.04
[C++] Unions  (0) 2022.01.04
[C++] 구조체의 POD(plain old data)  (0) 2022.01.04
[C++] 구조체 타입 동등성  (2) 2022.01.03
[C++] 구조체와 배열  (0) 2022.01.03