programing

커널 프로그래밍에서 서명되지 않은 int 대신 u8 u16 u32 u64가 사용되는 이유는 무엇입니까?

topblog 2023. 10. 20. 13:23
반응형

커널 프로그래밍에서 서명되지 않은 int 대신 u8 u16 u32 u64가 사용되는 이유는 무엇입니까?

커널 코드에서 사용되고 있는 u8 u16 u32 u64 데이터 타입을 봅니다.그리고 왜 사용해야 하는지 궁금합니다.u8아니면u16아니면u32아니면u64아닌unsigned int?

하드웨어에 가까운 작업을 하거나 데이터 구조의 크기/형식을 제어하려고 할 때 정수의 크기를 정확하게 제어해야 하는 경우가 많습니다.

에 관해서는u8uint8_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;

당신은 일반적으로 발견할 것입니다.typedefA에 대한 이러한 유형에 대한 선언types.h소스를 컴파일할 아키텍처에 해당하는 파일입니다.

이 질문에 대해 최근에 알게 된 내용을 공유합니다.

u32와 같은 명시적인 크기의 유형이 필요한 이유는 일반적인 C 데이터 유형이 모든 아키텍처에서 동일한 크기가 아니기 때문입니다.

다음 이미지는 긴 정수와 포인터의 크기가 다양한 플랫폼에서 다른 것을 보여줍니다.

enter image description here

이런 식으로 u32는 4바이트 길이의 정수를 보장할 수 있습니다.

언급URL : https://stackoverflow.com/questions/30896489/why-is-u8-u16-u32-u64-used-instead-of-unsigned-int-in-kernel-programming

반응형