免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1605 | 回复: 7
打印 上一主题 下一主题

弱弱的求助!(关于结构体声明和定义的问题) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-03-15 09:48 |只看该作者 |倒序浏览
#define MAX_ORDER 10

typedef struct free_area_struct {
        struct list_head        free_list;
        unsigned int                *map;
} free_area_t;

struct pglist_data;//此处是什么意思。为什么在下面才定义。。为什么不直接在这个地方定义这个结构>?
typedef struct zone_struct {
        /*
         * Commonly accessed fields:
         */
        spinlock_t                lock;
        unsigned long                offset;
        unsigned long                free_pages;
        unsigned long                inactive_clean_pages;
        unsigned long                inactive_dirty_pages;
        unsigned long                pages_min, pages_low, pages_high;

        /*
         * free areas of different sizes
         */
        struct list_head        inactive_clean_list;
        free_area_t                free_area[MAX_ORDER];

        /*
         * rarely used fields:
         */
        char                        *name;
        unsigned long                size;
        /*
         * Discontig memory support fields.
         */
        struct pglist_data        *zone_pgdat;
        unsigned long                zone_start_paddr;
        unsigned long                zone_start_mapnr;
        struct page                *zone_mem_map;
} zone_t;

#define ZONE_DMA                0
#define ZONE_NORMAL                1
#define ZONE_HIGHMEM                2
#define MAX_NR_ZONES                3

/*
* One allocation request operates on a zonelist. A zonelist
* is a list of zones, the first one is the 'goal' of the
* allocation, the other zones are fallback zones, in decreasing
* priority.
*
* Right now a zonelist takes up less than a cacheline. We never
* modify it apart from boot-up, and only a few indices are used,
* so despite the zonelist table being relatively big, the cache
* footprint of this construct is very small.
*/
typedef struct zonelist_struct {
        zone_t * zones [MAX_NR_ZONES+1]; // NULL delimited
        int gfp_mask;
} zonelist_t;

#define NR_GFPINDEX                0x100

struct bootmem_data;  //此处又出现了同样的问题。但是在下面也没有定义。。typedef struct pglist_data {
        zone_t node_zones[MAX_NR_ZONES];
        zonelist_t node_zonelists[NR_GFPINDEX];
        struct page *node_mem_map;
        unsigned long *valid_addr_bitmap;
        struct bootmem_data *bdata;
        unsigned long node_start_paddr;
        unsigned long node_start_mapnr;
        unsigned long node_size;
        int node_id;
        struct pglist_data *node_next;
} pg_data_t;
有知道的告诉我下。。谢谢了。

[ 本帖最后由 ianglm 于 2006-3-15 14:11 编辑 ]

论坛徽章:
5
2 [报告]
发表于 2006-03-15 11:00 |只看该作者
typedef struct zone_struct {
.....
struct pglist_data        *zone_pgdat;
.....
} zone_t;

typedef struct pglist_data {
        zone_t node_zones[MAX_NR_ZONES];
        zonelist_t node_zonelists[NR_GFPINDEX];
.....
} pg_data_t;


结构体互相成为对方的成员变量.

论坛徽章:
0
3 [报告]
发表于 2006-03-15 12:44 |只看该作者
C语言问题。
这里说了struct pglist_data;下面就可以用
struct pglist_data        *zone_pgdat;
了。

BTW: 请写清楚题目

论坛徽章:
0
4 [报告]
发表于 2006-03-15 14:11 |只看该作者
原帖由 albcamus 于 2006-3-15 12:44 发表
C语言问题。
这里说了struct pglist_data;下面就可以用
struct pglist_data        *zone_pgdat;
了。

BTW: 请写清楚题目


不定义也可以用吗?。。。

论坛徽章:
0
5 [报告]
发表于 2006-03-15 14:14 |只看该作者
可以。 struct A;就是告诉编译器: 嗯, 这个A虽然我还没定义, 可它是个结构, 你注意了哈

论坛徽章:
0
6 [报告]
发表于 2006-03-15 14:17 |只看该作者
这是声明和定义的区别.

论坛徽章:
0
7 [报告]
发表于 2006-03-15 15:31 |只看该作者
原帖由 albcamus 于 2006-3-15 14:14 发表
可以。 struct A;就是告诉编译器: 嗯, 这个A虽然我还没定义, 可它是个结构, 你注意了哈



如果你去讲课的话,一定很幽默。。

论坛徽章:
0
8 [报告]
发表于 2006-03-16 10:17 |只看该作者
连最基本的C语言还没通,不知道怎么看内核代码,快去写点程序吧,或看点书。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP