alignment와 padding 질문
글쓴이: 송지석 / 작성시간: 월, 2004/07/26 - 6:10오후
다음 같은 구조체가 있습니다.
typedef struct { char a; char b; short c; int aa[3]; char str[MAX]; } t_myType;
저는 PPC860에서 프로그래밍 중인데 통신에서 사용하려고 pack시켰습니다.
컴파일러 옵션에 -fpack-struct 를 사용했지요. 필요한 것만 __attribute__((packed)) 를 사용하면 됩니다만 예전부터 다른 사람들이 했던 소스라 고치기가 뭐해서 그냥 쓰고 있습니다.
그런데 map 파일을 보니 메모리상에 적재될 때 홀수 주소로 올라가더군요.
pack은 하지만 잘 보면 4byte로 맞춰져있습니다. 그래서 위 타입 같은 경우 4byte align 맞는 곳에 올라갔으면 하는데요. 그걸 보고 자세히 다른 변수들도 보니까 모든 변수들이 다 4byte align을 안맞추고 올라갑니다. short난 int(32bit) 변수들도 홀수번지에 적재되는 거죠.
문제는 저런식으로 만이아니고 그냥 별 생각 없이 사용하던 패킷 타입도 있을 것이란 것입니다. 그래서 컴파일러 pack 옵션은 놔두고 align만 4byte로 시작하게 할 방법이 없을까요? 변수들의 시작주소만 4byte를 맞추게 말이죠.
Forums:
위 선언 순서라면 굳이 pack 옵션 없이도 잘 packing될 듯 싶은
위 선언 순서라면 굳이 pack 옵션 없이도 잘 packing될 듯 싶은데요? (MAX 값이 4의 배수라면요.) 확인해보세요.
위에 썼듯이 제가 만든 구조체들은 4byte 씩 되는데요, 다른 사람이
위에 썼듯이 제가 만든 구조체들은 4byte 씩 되는데요, 다른 사람이 쓴 것을 확신하지 못하기 때문에 pack 옵션은 켜두고 변수들이 올라가는 첫 주소의 align만 맞출 수 있을까 해서요.
rommance.net
Re: alignment와 padding 질문
로 하신 str[] 은 4byte로 align 됩니다. 물론 gcc. 다른 cc에서는 pragma 로 맞추는데 옵션기억이 안납니다. ㅠ.ㅠ
========================================
* The truth will set you free.
[quote="sunyzero"][quote="송지석"]다음 같은 구조체
혹시
이렇게 하면 pack은 되면서 &myvar1, &myvar2는 4의 배수가 되나요?
rommance.net
[code:1]▣ Data Alignment 에 따른 문제 해결
댓글 달기