我在 Linux 内核源代码中的纯c代码中看到了这样的联合内部结构定义struct cma_multicast(它不是唯一的一个地方。似乎这是一些常见的做法):
struct cma_multicast {
struct rdma_id_private *id_priv;
union {
struct ib_sa_multicast *ib;
} multicast;
struct list_head list;
void *context;
struct sockaddr_storage addr;
struct kref mcref;
};
Run Code Online (Sandbox Code Playgroud)
但我无法弄清楚在结构中只有一个成员的联合的目的是什么?为什么我们不能直接输入struct ib_sa_multicast *ib;?
我读过这篇文章,但它没有使用说明,只有 C++ 特异性。
UPD:
发布的示例来自 Linux 内核而不是专有代码。
我有一些专有的内核模块。
突然我的系统在 kdb 中崩溃了,并出现这样的错误:
BUG: bad page state in process <kworker_name> pfn:37751
page:<page_address> count:-1 mapcount:0 mapping:00000000 index:0x0
...
page dumped because: nonzero _count
Run Code Online (Sandbox Code Playgroud)
那么应该如何理解它的确切含义呢?不幸的是我在互联网上找不到有关此错误的任何信息。和
是什么意思?可以得出什么结论?
抱歉,如果很明显的话。pfn:37751count:-1
linux debugging kernel-module linux-device-driver linux-kernel