휴대용 코드 - 문자당 비트 수
C/C++ 표준은 char당 최소 8비트만 보장하며 이론적으로는 9/16/42/다른 모든 것이 가능하며 따라서 휴대용 코드 작성에 관한 모든 사이트는 8bpc를 가정하지 말 것을 경고합니다.제 질문은 이게 얼마나 "휴대용이 아닌" 것인가 하는 것입니다.
제가 설명해 드릴게요.제가 보기에 시스템은 세 가지로 분류됩니다.
- 컴퓨터 - Mac/Linux/Windows/Unix/*nix/posix/무엇이든 실행하는 데스크톱, 노트북, 서버 등을 의미합니다. (목록이 정확하지는 않지만, 여러분은 이해하실 수 있습니다.)다음과 같은 시스템이 있다면 저는 매우 놀랄 것입니다.
char
정확히는 8비트가 아닙니다.(잘못된 경우 수정해 주십시오.) - 운영 체제를 갖춘 장치 - 여기에는 스마트폰과 그와 같은 임베디드 시스템이 포함됩니다.그러나 나는 그런 시스템을 발견하는 것에 별로 놀라지 않을 것입니다.
char
8비트 이상입니다. 현재까지 들어본 적이 없습니다. (다시 한번, 모르는 경우 알려주세요) - 베어 메탈(Bare Metal) 기기 - VCR, 전자레인지, 구형 휴대폰 등이 분야에서 저는 경험이 조금도 없어서 여기서 무슨 일이 일어날 수 있습니다.그러나 Windows 데스크톱과 전자레인지 간에 교차 플랫폼을 사용하려면 코드가 반드시 필요합니까?제가 둘 다 공통된 코드를 갖게 될 가능성이 있나요?
최종 결과:일반적인(%0.001 이상) 플랫폼(위의 범주 1 및 2에서)이 있습니까?char
8비트가 아닌가요?그리고 내 위의 추측이 사실일까요?
제한을 사용합니다.h
CHAR_BIT
http://www.cplusplus.com/reference/clibrary/climits/
또한 지정된 크기를 정확하게 사용하려면 stdint.h를 사용합니다.
예를 들어, 많은 DSP들은CHAR_BIT
16보다 크거나 같음.
적어도 64비트 아키텍처의 정수 크기와 유사하게 미래의 플랫폼은 더 많은 비트와 함께 더 넓은 문자를 사용할 수 있습니다.ASCII 문자가 더 이상 사용되지 않게 되어 유니코드로 대체될 수 있습니다.이것이 이유가 될 수도 있으니 주의하시기 바랍니다.
일반적으로 파일에 8비트 바이트가 있다고 가정하거나 그렇지 않은 경우 일반적으로 사용되는 도구에 의해 8비트 바이트 파일을 제로 패딩된 네이티브 형식으로 변환할 수 있습니다.하지만 CHAR_B를 가정하는 것은 훨씬 더 위험합니다.IT == 8. 현재는 거의 항상 그렇지만 미래에는 항상 그렇지 않을 수도 있습니다.메모리에 대한 8비트 액세스는 점점 더 병목 현상을 겪고 있습니다.
Posix 표준에는 CHAR_B가 필요합니다.8시가 되면.
따라서 Posix 호환 플랫폼에서 실행되는 코드만 신경 쓴다면 CHAR_B를 가정합니다.IT == 8은 괜찮고 좋습니다.
대부분의 상용 PC 플랫폼과 빌드 시스템이 이 요구 사항을 충족합니다.BSD 소켓 인터페이스를 사용하는 대부분의 플랫폼은 플랫폼 바이트가 옥텟이라는 가정이 매우 광범위하게 분포되어 있기 때문에 암묵적으로 이러한 요구 사항을 가지고 있을 가능성이 높습니다.
#if CHAR_BIT != 8
#error Your platform is unsupported!
#endif
POSIX가 CHAR_B를 의무화한 이유는 무엇입니까?IT==8?
현재 코드를 내장형 및 난해한 플랫폼에서 실행하려면 이러한 가정/제약에 대해 걱정해야 합니다.그렇지 않다면, 제가 보기에는 꽤 안전한 가정입니다.
언급URL : https://stackoverflow.com/questions/11600378/portable-code-bits-per-char
'programing' 카테고리의 다른 글
forceLayout(), requestLayout() 및 invalidate() 사용 (0) | 2023.10.27 |
---|---|
jQuery의 정규식 필드 유효성 검사 (0) | 2023.10.27 |
플라스크에서 SQL 화학 결과를 jsonify화합니다. (0) | 2023.10.27 |
middle click (새 탭) 및 javascript 링크 (0) | 2023.10.27 |
Oracle-sql의 특정 열에서 전체 데이터 삭제 (0) | 2023.10.27 |