0

我正在尝试研究linux内核并阅读内核代码,但我无法理解他们用于页面结构的结构,如下所示:我的意思是,为什么他们使用嵌套在嵌套在联合中的结构中的联合(代码已简化...)

struct page {
    unsigned long flags;
    struct address_space *mapping;

    struct {
        union {
            pgoff_t index;  
            void *freelist; 
        };

        union {
            unsigned counters;

            struct {

                union {

                    atomic_t _mapcount;
                    struct {
                        unsigned inuse:16;
                        unsigned objects:15;
                        unsigned frozen:1;
                    };
                };
                atomic_t _count;
            };
        };
    };
}
4

1 回答 1

0

它用于使代码更清晰。如果将成员分组,将更容易阅读和理解。

由于您没有在任何其他数据结构中使用“子结构”,因此它们是嵌套的。否则,它们将被声明为单独的并包含为成员,如下所示:

    struct list_based{
                pgoff_t index;  
                void *freelist; 
    };

    struct page {
        unsigned long flags;
        struct address_space *mapping;
        struct list_based lpage;
    };

    struct sector {
        unsigned long sub sect;
        struct list_based lsect;
    };
于 2013-05-06T12:58:29.063 回答