질문:
안전하게 읽고 쓰는 것이 가능합니까? 크로스 플랫폼과 컴파일러를 보장하는 방식으로 C 구조체를 파일로 변환 호환성?
답변:
아니요, C의 바이너리 수준 표준화가 부족하여 불가능합니다.
Don Box에 따르면 , C에는 바이너리 수준의 표준화가 부족합니다. 즉, 서로 다른 컴파일러가 구조체 패딩을 다르게 구현할 수 있음을 의미합니다. 동일한 컴파일러 내에서도 구조체의 패킹 정렬은 사용된 pragma 팩에 따라 달라질 수 있습니다.
또한 구조체 내의 멤버 순서가 크기에 영향을 미칠 수 있습니다. 예를 들어, 멤버는 동일하지만 선언 순서가 다른 구조체는 크기가 다를 수 있습니다.
예:
struct A { char c; char d; int i; }; struct B { char c; int i; char d; };
위 코드를 gcc-4.3.4로 컴파일하면 다음이 생성됩니다. :
8 12
이는 두 구조체의 멤버가 동일하더라도 크기가 동일함을 보여줍니다.
결론:
표준에서는 패딩 구현 방법을 지정하지 않으며 이를 컴파일러의 재량에 맡깁니다. 결과적으로 모든 컴파일러가 동일한 패딩 규칙을 적용할 것이라고 가정하는 것이 불가능하므로 크로스 플랫폼 호환성을 달성하기가 어렵습니다.
위 내용은 플랫폼과 컴파일러에서 C 구조체를 안전하게 읽고 쓸 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!