2014-09-26 3 views
0

나는이 내 코드에서 다음 태그 조합 : 나는 64 비트 리눅스에서 컴파일 또는 OS의 X cell_t의 크기는 항상, GCC 또는 연타를 사용하여 https://github.com/EarlGray/SECD/blob/f2e364f84d194aea5cef9257630bf931e9f88cab/secd.h#L217중복 크기

32 바이트 (예상대로 4 * sizeof(long)).

-m32 스위치를 사용하여 Linux (Ubuntu 14.04, gcc 4.8)에서 컴파일 할 때 크기는 예상대로 16 바이트입니다.

-m32으로 gcc (4.9) 또는 clang (Apple 6.0)을 사용하여 OS X (10.9.5)에서 동일한 코드를 컴파일 할 때 크기는 20 바이트입니다. 나는 프로그램을 디버그하고 다섯 번째 단어를 사용할지도 모르는 조합이 있는지 알아보기 위해 아무 것도 찾지 못했습니다. 최적화 수준 및 디버그 정보 존재 여부에 의존하지 않습니다.

sizeof(cell_t)이 20 바이트 인 이유는 무엇입니까? OS의 X에

+0

어떻게 구조체가 구조체에 배치 되었습니까? –

+0

@DavidHeffernan :'type'에 첫 번째 바이트를 사용하고,'nref'에 3 바이트를 사용하며, union은 예상대로 12 바이트를 사용합니다. 마지막 4 바이트는 0입니다 (내가 무엇을 놓치지 않았다면 본 것으로부터). –

+0

당신은 제로가 아닌 패딩을 의미합니다. –

답변

2

:

sizeof(off_t) == 8 

Linux의 경우 :

sizeof(off_t) == 4 

당신은 string_t의 유형을 사용합니다. 다른 경우가있을 수 있지만, 처음 만났습니다.

+0

감사합니다. 'ptrdiff_t'로 변경했는데,'off_t'는 실제로 파일을위한 것입니다. –