programing

C에서 선언문 안에 있는 콜론은 무엇을 의미합니까?

minimums 2023. 7. 7. 18:54
반응형

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

반응형