>백엔드 개발 >C++ >플랫폼과 컴파일러에서 C 구조체를 안전하게 읽고 쓸 수 있습니까?

플랫폼과 컴파일러에서 C 구조체를 안전하게 읽고 쓸 수 있습니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-20 13:17:22421검색

Can C   Structs Be Safely Read and Written Across Platforms and Compilers?

C 구조체의 크로스 플랫폼 읽기/쓰기

질문:

안전하게 읽고 쓰는 것이 가능합니까? 크로스 플랫폼과 컴파일러를 보장하는 방식으로 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.