커널 프로그래밍에서 서명되지 않은 int 대신 u8 u16 u32 u64가 사용되는 이유는 무엇입니까?
커널 코드에서 사용되고 있는 u8 u16 u32 u64 데이터 타입을 봅니다.그리고 왜 사용해야 하는지 궁금합니다.u8
아니면u16
아니면u32
아니면u64
아닌unsigned int
?
하드웨어에 가까운 작업을 하거나 데이터 구조의 크기/형식을 제어하려고 할 때 정수의 크기를 정확하게 제어해야 하는 경우가 많습니다.
에 관해서는u8
대uint8_t
, 이것은 단순히 리눅스가 앞선 것이기 때문입니다.<stdint.h>
기술적으로는 C99-ism이지만, 내 경험으로는 대부분의 현대 컴파일러에서 ANSI-C/C89 모드에서도 사용할 수 있습니다.
여기에 제 10센트를 더하면 됩니다.
u64
는 '부호화되지 않은 64비트' 값을 의미하므로 코드가 실행/컴파일될 아키텍처에 따라 실제로 64비트 길이가 되려면 다르게 정의되어야 합니다.
예를 들어 x86 머신에서는unsigned long
길이가 64비트입니다.u64
해당 기계는 다음과 같이 정의할 수 있습니다.
typedef unsigned long u64;
에 대해서도 마찬가지입니다.u32
. x86 기계에서,unsigned int
길이가 32비트라서요.u32
해당 기계는 다음과 같이 정의할 수 있습니다.
typedef unsigned int u32;
당신은 일반적으로 발견할 것입니다.typedef
A에 대한 이러한 유형에 대한 선언types.h
소스를 컴파일할 아키텍처에 해당하는 파일입니다.
이 질문에 대해 최근에 알게 된 내용을 공유합니다.
u32와 같은 명시적인 크기의 유형이 필요한 이유는 일반적인 C 데이터 유형이 모든 아키텍처에서 동일한 크기가 아니기 때문입니다.
다음 이미지는 긴 정수와 포인터의 크기가 다양한 플랫폼에서 다른 것을 보여줍니다.
이런 식으로 u32는 4바이트 길이의 정수를 보장할 수 있습니다.
언급URL : https://stackoverflow.com/questions/30896489/why-is-u8-u16-u32-u64-used-instead-of-unsigned-int-in-kernel-programming
'programing' 카테고리의 다른 글
다수의 커밋을 비상호작용적으로 스쿼시할 수 있는 방법이 있습니까? (0) | 2023.10.20 |
---|---|
바닥이 왜 이렇게 느려요? (0) | 2023.10.20 |
C++에 오버로드 기능이 추가된 이유는 무엇입니까? (0) | 2023.10.20 |
이 문자열 반전 C 코드가 세그먼트 오류를 일으키는 이유는 무엇입니까? (0) | 2023.10.20 |
여러 문자열을 한 번에 바꾸기 (0) | 2023.10.20 |