1.标准strcat 会有溢出风险,sdscat无溢出风险
2.空间预分配,惰性空间释放
空间预分配:sds分配空间时,如果原来是5,free是0, sdscat追加一个10长度的,此时字符串加长到15,free也同时分配15,总长为15 + 15free + 1(/0) 为31字节; 若大于1M后则以1M为单位追加。
这么做的原因是,内存分配是比较耗时的操作【https://baike.baidu.com/item/realloc/659993?fr=aladdin】,在原地址空间后面若无足够的可用空间,还需要内存拷贝。这样预分配free空间以减少后续的内存分配操作。
惰性过期:free后不会释放空间,会把减少的字符长度追加到free上。
3.二进制安全