Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c结构中私有变量的解释_C_Struct_Linux Kernel - Fatal编程技术网

c结构中私有变量的解释

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; } 我无法找到它的初始化位置,

您好,我在浏览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;
}
我无法找到它的初始化位置,因为它不在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
允许您访问这些元素。