구조체에서 대입하고 비교할 때 대입은 P2=P1이런식으로 가능한데 비교는 변수가 연속이 아닐 수 있어서 안된다카더라고 근데 그렇게치면 대입도 연속 아니면 좆되는 거 아니야? 왜 비교는 안되고 대입은 되는거야?
댓글 2
그러게. Byte Alignment 문제 때문에 구조체의 필드 간에는 의미 없는 작은 여백 공간(padding)이 생길 수가 있어. 이런 거 때문에 단순 메모리 비교로는 정확하지가 않으니까 안되는 것 같고 대입이야 padding 값이 덮어써지든 말든 상관은 없으니까 되는 것으로 보임.
ㅅㅅㅅ(125.128)2015-04-21 14:59
하지만 Byte Alignment를 고려해서 padding 안 생기게 한 구조체나 #pragma pack(1) 옵션으로 Byte Alignment를 강제로 변경한 경우에는 memcmp()로 비교해도 100% 정확성을 보장받을 수 있음. 구조체 비교 때문에 #pragma pack(1) 옵션으로 Byte Alignment를 무시시키는 경우도 은근히 많음.
그러게. Byte Alignment 문제 때문에 구조체의 필드 간에는 의미 없는 작은 여백 공간(padding)이 생길 수가 있어. 이런 거 때문에 단순 메모리 비교로는 정확하지가 않으니까 안되는 것 같고 대입이야 padding 값이 덮어써지든 말든 상관은 없으니까 되는 것으로 보임.
하지만 Byte Alignment를 고려해서 padding 안 생기게 한 구조체나 #pragma pack(1) 옵션으로 Byte Alignment를 강제로 변경한 경우에는 memcmp()로 비교해도 100% 정확성을 보장받을 수 있음. 구조체 비교 때문에 #pragma pack(1) 옵션으로 Byte Alignment를 무시시키는 경우도 은근히 많음.