用数组[1]替代堆分配

这是在学习风云的协程库时, 在他的博文里提到了这种写法. glibc或者linux源码里面也能见到, 但是没有仔细想想为什么.

基本写法

1
2
3
4
5
typedef struct __A__{
    // some members
}A;

A a[1];

平常见到这种写法也可能很少注意, 有什么用呢?

作用

  1. 方便使用地址访问;
  2. 减少拷贝操作(由于1的特性);
  3. 使用栈分配而不是堆分配得到类似指针的结果.

这有点像是RAII了.