-
联合体是复用内存的。
后面的内存会覆盖前面的内存
查看全部 -
结构体是消耗内存的。
a占了1个字节,会空出3个字节。然后b占4个字节。
查看全部 -
联合体。。。
查看全部 -
结构体。。。
查看全部 -
对于宏的理解
查看全部 -
6-1到6-2的练习实例
查看全部 -
unset 很巧妙。只是把type 置为了0。而不是真正的抹掉了内存。下次用的时候根据type做判断,直接覆盖。这样大大的节约了性能。
查看全部 -
gdb调试查看,值的存储位置
查看全部 -
gdb 调试 packet array 变成了hash array
查看全部 -
Packed Array 和Hash Array。
如果能用到Packed Array 就尽量使用Packed Array。节省内存。
查看全部 -
多出1MB的内存用到哪里了?
查看全部 -
hashtable的巧妙设计
查看全部 -
nTableMask:用来计算最终落到哪个桶里边的一个值。
arData 数组中的每个元素都是一个bucket。Bucket结构体元素如下。
zval 是key-value的value
zend_ulong h 是hash算法算出来的hash值
*key 是key-value的key
nNumUsed代表了有多少bucket 被使用了。
nNumofElements是跟nNumofElements是有区别的,比如unset 掉一个数组中的一个元素,nNumUsed并不会减少。nNumofElements会减少,nNumOfElements是真正有意义的值,不包括unset掉的值。
nTableSize 是bucket大小。
nInternalPointer内部指针。
nNextFreeElement :有时候并不写key就赋值一个value。通过这个nNextFreeElement知道了应该放到哪个位置。
pDestructor :用来析构用的。
查看全部 -
字符串的写时复制
查看全部 -
这种字符串的实现是二进制安全的。
什么是非二进制安全?字符串以\0结尾,如果字符串中有\0那么就会被截断。
什么是二进制安全呢?可以字符串len获取字符串的内容,即便字符串中有\0也不会因此而截断。
查看全部
举报