gpt4 book ai didi

C++ 套接字 : size of the structure addrinfo

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:23:40 25 4
gpt4 key购买 nike

我正在将 eclipse 与 cygwin 结合使用。该应用程序是 64 位的。在 cygwin 中,结构定义为:

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(4 个整数 = 16 个字节,socket_len = 4 个字节,3 个指针 = 24;20+4+24 = 44)。我想知道缺少的 4 个字节是做什么用的?它们是用来填充的吗?我认为 44 个字节不需要对齐。有什么想法吗?

提前感谢您的回答。

最佳答案

它是填充,在 socklen_t 之后。结构中的下一个变量是一个指针,长度为 64 位,并且(在本例中)也将对齐到 64 位。但是请注意,填充取决于体系结构和编译器设置;它发生在这里,但不能保证总是发生。

请注意,由于您正在与操作系统共享此结构,因此您不应尝试自己更改填充(大多数编译器允许使用编译器开关和/或编译指示)。操作系统期望这个结构包含一定数量的填充。如果您未能提供它,则结构末尾的所有指针的值都会被误解。

关于C++ 套接字 : size of the structure addrinfo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35386208/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com