用数组[1]替代堆分配

摘要: 作者介绍了在学习风云协程库时遇到的用数组[1]替代堆分配的写法,指出这种写法在glibc和Linux源码中也有应用。其作用包括方便地址访问、减少拷贝操作以及实现类似指针的栈分配效果,具有一定的RAII特性。 (评价: A)



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

基本写法

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

A a[1];

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

作用

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

这有点像是RAII了.