最近在研究PHP的底层源码,十分懵逼,PHP5数组是一个hashtable,里面的bucket桶的结构体如下
typedef struct bucket{
ulong h;
uint nkeyLenght;
void *pData;
void *pDataPtr;
struct bucket *pListNext;
struct bucket *pListLast;
struct bucket *pNext;
struct bucket *pLast;
const char *arkey;
}Bucket;
pData和pDataPtr都是指针,占8个字节,表示数组的值,一般值都存储在pData所指向的内存空间,pDataPtr为NULL空指针
我看了陈雷大佬写的PHP源码书,说
"如果value的大小等于一个指针的大小,那么将不会额外的申请内存空间存这个指针,而是直接存储在pDataPtr上,再让pData指向pDataPtr,可以减少内存碎片"
我感觉非常懵逼
1.啥叫如果value的大小等于一个指针大小???
2.pDataPtr是占用空间的,即使指向了NULL也是8个字节,为啥不让所有的值都存在pData指向的地址呢????每次pDataPtr都会浪费8个字节的空间啊
感觉这个pDataPtr好多余