创建数组

7.7.5.1 创建数组

创建一个新的HashTable分为两步:首先是分配zend_array内存,这个可以通过ZVAL_NEW_ARR()宏分配,也可以自己直接分配;然后初始化数组,通过zend_hash_init()宏完成,如果不进行初始化数组将无法使用。

#define zend_hash_init(ht, nSize, pHashFunction, pDestructor, persistent) \
    _zend_hash_init((ht), (nSize), (pDestructor), (persistent) ZEND_FILE_LINE_CC)
  • ht: 数组地址HashTable*,如果内部使用可以直接通过emalloc分配
  • nSize: 初始化大小,只是参考值,这个值会被对齐到2^n,最小为8
  • pHashFunction: 无用,设置为NULL即可
  • pDestructor: 删除或更新数组元素时会调用这个函数对操作的元素进行处理,比如将一个字符串插入数组,字符串的refcount增加,删除时不是简单的将元素的Bucket删除就可以了,还需要对其refcount进行处理,这个函数就是进行清理工作的
  • persistent: 是否持久化

示例:

zval        array;
uint32_t    size;

ZVAL_NEW_ARR(&array);
zend_hash_init(Z_ARRVAL(array), size, NULL, ZVAL_PTR_DTOR, 0);
联系我们

邮箱 626512443@qq.com
电话 18611320371(微信)
QQ群 235681453

Copyright © 2015-2024

备案号:京ICP备15003423号-3