[완료] 구조체 내용을 똑같이 만들어서 두개의 시스템에서 돌리는데..

lemk000의 이미지

어제 소켓통신에 문제가 있어서
제생각에 코드상에는 문제가 없는것같아 구조체의 크기를 sizeof로 찍어보았습니다.

근데 왜그런지 도무지 이해를 못하겠는데요

typedef struct _CGPointd {
    double x;
    double y;
} CGPointd;
 
typedef struct _Message {
    Byte messageType;
    CGPointd point;
    char text[40];
} Message;

지금 메시지 타입을 저렇게 정해놓고 sizeof를 해서 크기를 찍었습니다.
시스템은 인텔 코어2듀오가 깔린 맥 osx이고, 다른한쪽은 a4가 달린 아이폰입니다.

messageType, point, text를 sizeof로 찍으면 각각 1, 16, 40 의 결과가 나옵니다. 양쪽 다요
뭐 당연하겠죠
근데 sizeof로 Message 자체를 찍으면 아이폰에서는 60바이트가 찍히고 맥에서는 64바이트가 찍힙니다.
안에 내용이 같은데 어떻게 이런일이 벌어지는지를 모르겠습니다. 도와주세요 ㅜ

ifree의 이미지

컴파일러가 입출력 최적화를 위해 패딩을 집어 넣은 듯.

lemk000의 이미지

전 패딩비트라는 개념 존재를 모르고있었는데;
다행이 이것때문이었습니다. 이것때문에 2일밤샜네요

태훈의 이미지

__attribute__((packed))를 붙여주세요.

typedef struct _CGPointd {
    double x;
    double y;
} __attribute__((packed)) CGPointd;
 
typedef struct _Message {
    Byte messageType;
    CGPointd point;
    char text[40];
} __attribute__((packed)) Message;

Just do it!