C语言自引用结构体struct foo与struct header指针语句作用疑问
C语言自引用结构体与GC链表指针说明
基础自引用结构体解释
你最初遇到的struct foo{struct foo *var;};是C语言的自引用结构体标准写法。
- 结构体声明阶段,编译器还未完成该结构体的内存布局计算,无法直接在结构体内部嵌入同类型的实体成员
- 指针的内存占用在固定编译环境下是确定值(32位环境下4字节、64位环境下8字节),和指针指向的类型无关,因此可以声明同类型结构体的指针作为成员
- 这类结构通常用来实现链表、树、图等需要链式关联的自定义数据结构
GC示例中struct header *next的作用
你在垃圾回收代码中看到的header_t结构体,next指针是GC内存管理的核心组件:
typedef struct header { unsigned int size; struct header *next; } header_t;
- 所有通过该GC接口分配的内存块,开头都会附带一个
header_t头结构,size成员记录当前内存块的有效数据长度 next指针会指向GC管理的下一个已分配/空闲内存块的头地址,所有内存块会被串成一个完整的链表- GC执行标记、扫描、回收、碎片整理逻辑时,只需要遍历这个链表就可以访问到所有被GC托管的内存,不需要依赖操作系统的内存分配接口额外查询
另外你对typedef作用的理解是正确的,typedef在这里只是给struct header定义了别名header_t,简化后续的类型声明代码。
内容的提问来源于stack exchange,提问作者ronalddd
相关产品推荐
相关产品推荐

