가능한 중복 :
What does ‘unsigned temp:3’ meansC에서 선언 내에서 콜론은 무엇을 의미합니까?
내가 어떤 커널 코드를 학습하고, 다음과 같은 라인을 따라 온거야 (리눅스 2.4, sched.h에에서, 구조체의 mm_struct) :
unsigned dumpable:1;
이것은 무엇을 의미합니까?
가능한 중복 :
What does ‘unsigned temp:3’ meansC에서 선언 내에서 콜론은 무엇을 의미합니까?
내가 어떤 커널 코드를 학습하고, 다음과 같은 라인을 따라 온거야 (리눅스 2.4, sched.h에에서, 구조체의 mm_struct) :
unsigned dumpable:1;
이것은 무엇을 의미합니까?
회원은 bitfield입니다. 코드의 의미는 dumpable
이 구조에서 정확히 1 비트를 차지한다는 의미입니다.
비트 수준에서 멤버를 팩할 때 비트 필드가 사용됩니다. 구조체에 많은 플래그가있을 때 사용되는 메모리 크기를 크게 줄일 수 있습니다. 우리는 공지 숫자 제약 4 부재를 갖는 구조체를 정의하는 경우, 예를 들어
0 < a < 20
b in [0, 1]
0 < c < 8
0 < d < 100
후 구조체는 푸 의 비트
처럼 배열 될있다struct Foo {
unsigned a : 5; // 20 < 2^5 = 32
unsigned b : 1; //
unsigned c : 3; //
unsigned d : 7; // 100 < 2^7 = 128
};
로서 선언 될 수있다
ddddddd c cc b aaaaa
--------- --------- --------- ----------
octet 1 octet 0
===========================================
uint32
대신
,210이있는 비트 수 때문에 값
# wasted space which is not used by the program
# v v
ddddddd ccc
------------------------------------ ------------------------------------
uint32 uint32
b aaaaa
------------------------------------ ------------------------------------
uint32 uint32
그래서 당신이 함께 많은 회원을 포장하여 공간을 절약 할 수 있습니다
의 범위를 낭비하고 있습니다.C 표준은 비트 필드가 "주소 지정 가능한 저장 장치"내에 배열 또는 패킹되는 방법을 지정하지 않는다는 것에 유의하십시오. 또한 직접 멤버 액세스에 비해 비트 필드가 느립니다.
멋진 답변을 보내 주셔서 감사합니다. 캐주얼 독자를 위해 비트 필드의 구현은 컴퓨터에 종속적 일뿐만 아니라 컴파일러에 종속적이기 때문에 메모리의 해당 비트 위치에 대한 가정을 사용하는 코드는 매우 중요하지 않습니다. – Tzafrir
C99 표준은 충분한 공간을 사용할 수있을 때 비트 필드가 서로 인접하게 배치되도록 정의합니다. "구현은 비트 필드를 보유 할만큼 충분히 큰 주소 지정 가능한 저장 장치를 할당 할 수 있습니다. 충분한 공간이 남아 있으면 구조의 다른 비트 필드 바로 뒤에 오는 비트 필드가 동일한 장치의 인접한 비트로 채워집니다." – waynix
비트 필드라는 의미입니다. 즉, 덤프 가능 크기는 단일 비트이며, 0 또는 1로만 할당 할 수 있습니다. 일반적으로 오래된 코드에서 공간을 절약하기 위해 사용되거나 하드웨어와 인터페이스하는 하위 레벨 코드 (패킹이 이식성이 아닐지라도)에 사용됩니다. 자세한 내용은 here을 참조하십시오.
포장은 정확하게 지적한 것처럼 보이지는 않습니다. 종종 비트 필드는 4 바이트 경계에 정렬됩니다. 그러나 이것에 영향을 미치는 컴파일러 옵션이 있습니다. – GorillaPatch
구조체 내부에서 사용할 경우 콜론 다음의 숫자는 변수 (또는 비트 필드)를 구성하는 비트 수를 나타냅니다.
따라서 unsigned dumpable:1;
은 단일 비트 필드입니다.
3 진법은 기본 3입니다. 당신은 3자를 의미하고, 그것이 유일한 3 진 연산자이지만 John이 그 이름이 아닌 것처럼 말합니다. –
감사합니다. 이러한 수정에 감사드립니다. 나는 관련성이 없어서 그 질문을 모두 삭제했다. – Tzafrir
저는 콜론 태그가이 질문에 남아 있어야한다고 생각합니다. 다른 사람들은 저처럼, 묻기 전에이 단어가 무엇을 의미하는지 알아 내려고 시도하기 위해 그 단어를 사용합니다. – Tzafrir