c结构中私有变量的解释
您好,我在浏览Linux内核代码时,在一个结构中遇到了下面这行代码c结构中私有变量的解释,c,struct,linux-kernel,C,Struct,Linux Kernel,您好,我在浏览Linux内核代码时,在一个结构中遇到了下面这行代码 unsigned long private[0] ____cacheline_aligned; 它在struct mmc_host中定义。其用途如下: host = mmc_priv(mmc); static inline void *mmc_priv(struct mmc_host *host) { return (void *)host->private; } 我无法找到它的初始化位置,
unsigned long private[0] ____cacheline_aligned;
它在struct mmc_host中定义。其用途如下:
host = mmc_priv(mmc);
static inline void *mmc_priv(struct mmc_host *host)
{
return (void *)host->private;
}
我无法找到它的初始化位置,因为它不在mmc\u alloc\u host()函数中
请参阅以下代码链接。它被定义为struct mmc_host中的最后一个变量
这是一个零元素数组,在ISO C中是非法的,但可能是的一个实现。它取决于gcc扩展
\uuuuuuuu cacheline\u aligned
是宏或gcc扩展
创建struct mmc_host对象的代码可能会为该数组的元素分配额外的空间;成员名private
允许您访问这些元素
事实上,mcc\u alloc\u host
函数接受一个额外的参数(适当地称为extra
),该参数指定要分配的额外字节数;这些额外字节构成了专用数组:
struct mmc_host *mmc_alloc_host(int extra, struct device *dev)
{
...
host = kzalloc(sizeof(struct mmc_host) + extra, GFP_KERNEL);
if (!host)
return NULL;
对此函数的调用可能如下所示:
struct mmc_host *ptr = mmc_alloc(N * sizeof (unsigned long), some_pointer);
它是一个零元素数组,在ISO C中是非法的,但可能是一个依赖于gcc扩展的实现\uuuuuuuuuuuuuuuuuu cacheline\u aligned
是宏或gcc扩展。创建struct mmc\u host
对象的代码可能会为此数组的元素分配额外的空间;成员名private
允许您访问这些元素。