union, struct, bit field 등 바이트 패딩이 사용된 코드에서, 호스트 테스트 결과가 타깃과 다르게 나올 수 있습니다.
struct나 bit field 등을 사용할 때 컴파일러는 CPU가 데이터에 효율적으로 접근하도록 멤버 변수가 할당된 공간 뒤에 바이트를 삽입하는데, 이것을 바이트 패딩이라고 합니다.
시스템에 따라, 컴파일러는 멤버 변수의 주소가 4바이트, 8바이트 등의 배수가 되도록 패딩 바이트를 삽입합니다.

struct MyData
{
    char Data1; 
    long Data2; 
    int Data3; 
};

n번지에 Data1이 할당되어 있을 때, Data2는 n+2번지에 위치할 것 같지만 실제로는 n+4 혹은 n+8번지에 위치하는데, Data2의 주소가 4바이트 혹은 8바이트의 배수가 되도록 컴파일러가 패딩 바이트를 삽입하기 때문입니다.
패딩 바이트를 얼마나 삽입할지는 컴파일러와 시스템에 따라 다릅니다.
예를 들어 long 타입 변수의 주소는 x86 시스템에서는 4바이트의 배수, x64 시스템에서는 8바이트의 배수가 되도록 패딩 바이트가 삽입됩니다.
그래서 바이트 패딩이 사용되는 union, struct, bit field 등이 있는 프로젝트의 호스트 테스트 결과는 타깃과 다를 수 있습니다.
이 경우에는 타깃에서 테스트하거나 호스트에 맞게 코드를 수정해야 합니다.

Need more help with this?
Don’t hesitate to contact us here.

Thanks for your feedback.