本文共 451 字,大约阅读时间需要 1 分钟。
本文装载自:
主要是在看leveldb源码时, SkipList::Node里面的port::AtomicPointer next_[1]定义有点不解,因此上网搜到下面这篇讲解,做个笔记。
前言
今天在看代码中遇到一个结构中包含char data[0],第一次见到时感觉很奇怪,数组的长度怎么可能为0呢?于是上网搜了一下这样的用法,发现在linux内核中,结构体中经常用到data[0]。这样设计的目的是让数组长度可变,根据需要分配。方便操作,节省空间。
data[0]结构
经常遇到的结构形式如下
struct buffer{ int data_len; //长度 char data[0]; //起始地址};
在这个结构中,data是一个数组名;但是该数组并没有元素;该数组的真是地址紧随结构体buffer之后,而这个地址就是结构体后面数据的地址、如果给这个结构体分配的内容大于这个结构体的实际大小,后面的部分就是这个data的内容。这种声明方法可以巧妙地实现C语言里的数组拓展。
转载地址:http://fsqxi.baihongyu.com/