遍历 Zend 源代码中的 'zval' 结构,我看到了这样的内容: // zend_types.h
struct _zend_string {
zend_refcounted_h gc;
zend_ulong h; /* hash value */
size_t len;
char val[1];
};
这个结构体是用来存储字符串的,但是'char val[1]'看起来很别扭,怎么用呢?
类似的东西用于在编译时访问长度未知的数组。该结构体从
malloc
获取内存,其大小大于该结构体。所以可以使用数组来访问多余的内存。 len
保持在限制范围内很重要。
奇怪的是,它是一个 1 元素数组,0 元素数组对此很常见,直到 c99 中引入了可变长度数组 (
val[]
)。