我使用蝕與cygwin的。該應用程序是64位。在Cygwin中的結構被定義爲:C++插座:該結構的大小addrinfo中
struct addrinfo {
int ai_flags; /* input flags */
int ai_family; /* address family of socket */
int ai_socktype; /* socket type */
int ai_protocol; /* ai_protocol */
socklen_t ai_addrlen; /* length of socket address */
char *ai_canonname; /* canonical name of service location */
struct sockaddr *ai_addr; /* socket address of socket */
struct addrinfo *ai_next; /* pointer to next in list */
};
的的sizeof(addrinfo中)的結果是48。socketlen_t的大小爲4個字節。 int類型的大小是4個字節。指針在64位應用程序中是8個字節。總字節數爲44(4ints = 16字節,socket_len = 4字節,3指針= 24; 20 + 4 + 24 = 44)。我想知道缺少的4個字節是什麼?他們是否填充?我認爲44個字節不需要對齊。任何想法?
感謝提前答案。
感謝您的回答,使用gcc編譯器,是有可能的填充,可以刪除嗎? – r0ng
是的;請參閱https://gcc.gnu.org/onlinedocs/gcc-4.8.4/gcc/Structure-Packing-Pragmas.html。但是請注意,如果您對操作系統指定的結構(該addrinfo是!)執行此操作,則會導致未定義的行爲,如第二段所述。 –