遍历' zval' Zend源代码中的结构,我看到了这个: // zend_types.h
struct _zend_string {
zend_refcounted_h gc;
zend_ulong h; /* hash value */
size_t len;
char val[1];
};
这个结构用于存储字符串,但是' char val [1]'看起来很尴尬它是如何使用的?
答案 0 :(得分:2)
这样的东西用于在编译时访问未知长度的数组。结构从malloc
获取其内存,其大小大于结构。因此,该阵列可用于访问多余的内存。 len
对于保持在极限状态非常重要。
奇怪的是,它是一个1元素数组,0元素数组是常见的,直到在c99中引入了可变长度数组(val[]
)。