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.二进制安全

 

 

 

 

 

 

 

 

posted on 2019-11-26 09:00  大辉_FFf  阅读(154)  评论(0编辑  收藏  举报