zend php 动态数组
这篇讲的是如何从Zend PHP源码中学习动态数组的C语言实现。作者从C语言静态数组长度固定的痛点切入,指出在很多场景下我们无法预先知道数据规模,但又不想浪费内存预分配一个过大的数组。解决思路就是动态数组:先用malloc分配一块连续内存,通过指针像操作数组一样访问;当空间不足时,用realloc进行扩容(它会保留原有数据)。 文章的核心部分是剖析Zend PHP中动态数组的具体实现。作者展示了完整的头文件和源码,包括初始化、插入、获取、销毁等关键操作。其实现很巧妙:用一个结构体封装数组指针、元素大小、当前元素数和已分配容量;在push时,如果当前容量已满,就将容量翻倍进行realloc,确保了均摊下的高效插入;通过元素大小和偏移量计算,可以泛型地支持任意类型的数组。文末通过一个读取输入并输出的对比实验,直观展示了静态数组(固定缓冲区可能截断数据)和动态数组(随输入自动增长)在实际应用中的行为差异。