蛋白质结构的静态分配是如何工作的?
How does the static allocation of a protoent struct work?
在 C 中,当我使用 netdb.h
中的 getprotoent()
、getprotobyname()
和 getprotobynumber()
函数时,我得到一个指向 " 的静态指针分配 protoent
结构。所以我明白没有必要自己释放任何内存。
但是,内存究竟是如何分配的?它的范围是什么? The docs 说这些函数 " 都使用相同的静态区域 return protoent
结构"," 只是在同一线程上调用这些函数中的下一个之前有效。
因此,那段内存是什么时候释放的?这就是我真正希望能够完全理解的。非常感谢!
这些静态区域的内存在程序启动时预留,并在程序的整个生命周期内保持有效。
考虑这段代码:
char *getname(void)
{
static char name[] = "my name";
return name;
}
static
关键字应用于函数内部的变量时意味着它的生命周期是整个程序的生命周期。这允许您 return 从函数中指向此变量的指针,该指针在函数退出时仍然有效。它实际上是一个全局变量,其名称仅在函数内部可见。
protoent 系列函数做类似的事情。他们在内部有一个 static
变量,他们填充和 return 一个指向的指针。
在 C 中,当我使用 netdb.h
中的 getprotoent()
、getprotobyname()
和 getprotobynumber()
函数时,我得到一个指向 " 的静态指针分配 protoent
结构。所以我明白没有必要自己释放任何内存。
但是,内存究竟是如何分配的?它的范围是什么? The docs 说这些函数 " 都使用相同的静态区域 return protoent
结构"," 只是在同一线程上调用这些函数中的下一个之前有效。
因此,那段内存是什么时候释放的?这就是我真正希望能够完全理解的。非常感谢!
这些静态区域的内存在程序启动时预留,并在程序的整个生命周期内保持有效。
考虑这段代码:
char *getname(void)
{
static char name[] = "my name";
return name;
}
static
关键字应用于函数内部的变量时意味着它的生命周期是整个程序的生命周期。这允许您 return 从函数中指向此变量的指针,该指针在函数退出时仍然有效。它实际上是一个全局变量,其名称仅在函数内部可见。
protoent 系列函数做类似的事情。他们在内部有一个 static
变量,他们填充和 return 一个指向的指针。