C에서 선언문 안에 있는 콜론은 무엇을 의미합니까?
중복 가능성:
'unsigned temp:3'은 무엇을 의미합니까?
저는 커널 코드를 배우고 있으며, 다음과 같은 라인(리눅스 2.4, sched.h, struct mm_struct)을 따라왔습니다.
unsigned dumpable:1;
이것은 무엇을 의미합니까?
비트필드 멤버입니다.당신의 코드는 다음과 같습니다.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
대신에
struct Foo {
unsigned a;
unsigned b;
unsigned c;
unsigned d;
};
값의 범위로 인해 많은 비트가 낭비되는 경우
# wasted space which is not used by the program
# v v
ddddddd ccc
------------------------------------ ------------------------------------
uint32 uint32
b aaaaa
------------------------------------ ------------------------------------
uint32 uint32
그래서 많은 멤버들을 모아서 공간을 절약할 수 있습니다.
C 표준은 비트 필드가 "주소 지정 가능한 저장 장치" 내에서 배열되거나 패킹되는 방법을 지정하지 않습니다.또한 비트 필드는 직접 멤버 액세스에 비해 느립니다.
즉, 덤프 가능한 크기는 단일 비트이며 0 또는 1만 할당할 수 있습니다.일반적으로 공간을 절약하기 위해 이전 코드 또는 하드웨어와 인터페이스하는 로우 레벨 코드에서 사용됩니다(패킹이 휴대용이 아님에도 불구하고).자세한 내용은 여기를 참조하십시오.
내 기억이 맞다면, 구조체 내부에서 사용될 때 콜론 뒤의 숫자는 변수(또는 비트 필드)를 구성하는 비트 수를 나타냅니다.
그렇게unsigned dumpable:1;
는 단일 비트 필드입니다.
언급URL : https://stackoverflow.com/questions/3186008/in-c-what-does-a-colon-mean-inside-a-declaration
'programing' 카테고리의 다른 글
APNS용 .pem 파일을 생성하시겠습니까? (0) | 2023.07.12 |
---|---|
최종 결과뿐만 아니라 주피터에서 전체 출력을 표시하는 방법은 무엇입니까? (0) | 2023.07.07 |
mongodb 셸 쿼리에서 GUID를 사용하는 방법 (0) | 2023.07.07 |
기존 Git 프로젝트를 GitLab으로 가져오시겠습니까? (0) | 2023.07.07 |
@Spring Boot 2.0.0.REASE에 LocalServerPort가 없습니다. (0) | 2023.07.07 |