__attribute__ ((packed)) 에 대해 질문입니다.
글쓴이: lovejin0309 / 작성시간: 금, 2005/05/13 - 4:24오후
유영창님이 지은 "리눅스 디바이스 드라이버" 라는 책을 공부중입니다.
책 내용중에
typedef struct { unsigned long size; unsigned char buff[128]; } __attribute__ ((packed)) ioctrl_test_info;
란 부분이 나옵니다.
__attribute__ ((packed)) 란 부분이 패딩 문제 때문에 해 주는 것으로 알고 있습니다.
그런데 "__attribute__ ((packed))" 를 붙여 주면 패딩을 안 해 준다는 것은 알겠는데, __attribute__ 나 ((packed)) 가 정확히 어떤 역활을 하기 때문에 패딩을 방지해 주는지를 명확히 모르겠습니다.
설명 부탁 드릴께요.
Forums:
32비트 아키텍처인 경우pad -> 1byteex)s
32비트 아키텍처인 경우
pad -> 1byte
ex)
struct {
char a;
int b;
char c;
short d;
}
|pad | pad | pad | a |
| b |
| d | pad | c |
packed
| d | c | a |
| b |
이렇게 pad 가 사라짐으로써 가용 메모리를 1 word 절약하였네요.
무제? 무죄!
감사합니다. 패딩에 대해선 알고 있구요. __attribu
감사합니다.
패딩에 대해선 알고 있구요.
__attribute__ 와 ((packed))에 대해서 알고 싶습니다.
그 지시자들이 정확히 어떤 뜻을 지니고 있는 걸까요?
[quote="Anonymous"]감사합니다. 패딩에 대해선 알고
__attribute__(...)의 인자로써 (packed) 속성이 지정된 겁니다.
정확한 뜻은 별 것 없이 '패딩을 하지 말아라'이죠.
컴파일 규격에 나오는 내용이며 컴파일 규격에 따라
컴파일 규격에 나오는 내용이며
컴파일 규격에 따라 내용이 조금씩 다르거나 사용하지 않는 것들이 있습니다.
C언어에서 예약어가 있는 것처럼
해당 구문도 예약어로써 컴파일 안에서 해당 문구를 해석해서 처리합니다.
굳이 packed를 할 필요가 없는
굳이 packed를 할 필요가 없는 구조체인데..
구조체 요소를 보면 char배열이 long단위로 떨어지는 크기이므로 packed가 있으나 없으나 결과는 같습니다.
__attribute__ ((packed)) 는 빼도 될 것 같습니다.
gcc가 제공하는 C extension기능 중,
gcc가 제공하는 C extension기능 중, variable attribute라는 겁니다.
http://gcc.gnu.org/onlinedocs/gcc/Variable-Attributes.html#Variable-Attributes
생산적인 댓글을 달자
댓글 달기