POSIX가 CHAR_B를 의무화한 이유는 무엇입니까?IT==8?
POSIX의 이론적 근거에는 CHAR_B를 의무화하는 내용이 있습니다.8번은 소켓/네트워킹을 버리지 않고 C99와 정렬을 유지하기 위해 양보한 것이지만, 정확히 어떤 충돌인지에 대한 설명은 본 적이 없습니다.왜 그것이 필요하다고 여겨졌는지에 대한 일화나 인용이 있는 사람이 있습니까?
편집: 왜 그것이 바람직한지에 대한 추측성 답변을 많이 받았습니다.CHAR_BIT
것에 항목 충돌이 무엇인가 8살이 되는 것에 동의합니다. 하지만 제가 정말로 찾고 있는 것은 POSIX에서 C99와 네트워킹 사이의 기술적 충돌이 무엇인가 하는 것입니다.제 추측으로는 C99가 필요한 것과 관련이 있는 것 같습니다.uint*_t
정확한 크기의 유형(패딩 없음)인 반면에inttypes.h
이전에 POSIX에서는 그러한 요구사항이 없었습니다.
ANSI와 ISO 중 (통신 관련) 표준의 대부분이 옥텟(8비트 값)으로 말하기 때문입니다.소원을 비는 변수 크기의 캐릭터 넌센스는 없습니다 :-)
그리고, C 코드가 많이 사용되었기 때문에char
아니면unsigned char
이 값들을 저장 및/또는 조작하기 위해 그리고 그것들이 8비트 폭이라고 가정할 때, ISO가 가변적인 크기를 허용했다는 사실은 그 코드에 문제를 일으킬 것입니다.
ISO C의 우선 목표 중 하나를 기억하십시오. 기존 코드는 중요하지만 기존 구현은 중요하지 않습니다.이것이 한가지 이유입니다.limits.h
특정 값만을 가정하는 것이 아니라 처음부터 존재합니다. 그렇지 않으면 가정된 주변에 코드가 있었기 때문입니다.
POSIX도 같은 지침을 따랐습니다.바이트 크기를 8비트로 의무화함으로써, 그들은 이미 현실 세계에 존재하는 엄청난 양의 코드가 깨지는 것을 막았습니다.
왜냐면char
만약 당신이 만든 것이라면, C에서 주소를 지정할 수 있는 가장 작은 단위입니다.char
8비트보다 큰 경우, 말씀하신 대로 소켓 구현을 작성하는 것은 어렵거나 불가능할 것입니다.네트워크가 모두 실행됨CHAR_BIT == 8
기계들.그래서, 만약 당신이 기계로부터 메시지를 보낸다면,CHAR_BIT == 9
기계로, 기계에.CHAR_BIT == 8
, 여분의 비트로 소켓 라이브러리는 무엇을 합니까?그 질문에 합당한 답이 없습니다.비트를 잘라내면 소켓 코드의 클라이언트에 버퍼처럼 간단한 것도 지정하기 어려워집니다. "문자 배열이지만 처음 8비트만 사용할 수 있습니다." 이런 시스템에서는 무리입니다.게다가 8비트 시스템에서 9비트로 변경하는 것도 같은 문제입니다. 소켓 시스템은 그 여분의 비트를 어떻게 처리해야 할까요?만약 그것이 그 비트를 0으로 설정한다면, 어떤 사람이 어떤 일이 일어나는지 상상해 보세요.int
유선상으로9비트 기계에서 모든 종류의 고약한 비트마스킹을 해야 제대로 작동할 수 있습니다.
마지막으로, 99.9%의 기계가 8비트 문자를 사용하기 때문에 큰 한계는 없습니다.사용하는 대부분의 컴퓨터CHAR_BIT != 8
가상 메모리도 없습니다. 어쨌든 POSIX 호환성에서 제외됩니다.
(표준 C가 가정하는 것처럼) 단일 머신에서 실행할 때 다음과 같은 작업을 수행할 수 있습니다.CHAR_BIT
불가지론자입니다. 왜냐하면 데이터를 읽거나 쓰는 것의 양쪽 모두 현재의 상황에 동의하기 때문입니다.할 때해야 합니다. (보다 엔디안성이 더 많은 에 빅 엔디안에 에 대해 일치해야 합니다. (엔디안성은 바이트 크기보다 엔디안성이 더 많은 아키텍처가 엔디안성에 대해 다르기 때문에 유선상으로는 빅 엔디안에 거의 표준화되어 있습니다.)
내 추측으로는:
많은 코드들이 비트들을 통과합니다.
for (int i = 0; i < 8; i++) { ... }
모든 것이 깨질 겁니다
대부분의 다른 언어들은 어쨌든 8비트라고 가정하고, 만약 그렇지 않다면 완전히 깨질 것입니다.
대부분의 언어가 이 기능을 필요로 하지 않더라도 대부분의 ABI는 여전히 중단됩니다.
16진수(니블 2개)로 편리합니다.
0xAA
그 길을 가기 시작하면 다음과 같은 생각을 하게 될 것입니다.그럼, 누가 2주 비트를 사용해야 한다고 하던가요?트라이스테이트 비트가 없는 이유는?등..점점 실용성이 떨어지기 시작할 뿐입니다.
언급URL : https://stackoverflow.com/questions/6631491/why-did-posix-mandate-char-bit-8
'programing' 카테고리의 다른 글
Oracle에서 A,B 형식의 두 열 데이터를 검색하는 방법 (0) | 2023.10.17 |
---|---|
현재 실행 중인 코드에 대한 HMODULE을 얻으려면 어떻게 해야 합니까? (0) | 2023.10.17 |
AngularJS에서 페이지에 iframe을 동적으로 삽입합니다. (0) | 2023.10.17 |
실행 중인 컨테이너가 없는데도 이미지를 제거할 수 없습니다. (0) | 2023.10.17 |
Java PreparedStatement 마지막으로 삽입한 상태 (0) | 2023.10.17 |