/* * 建立一個長度爲0的空sds字符串。 * 即便是空字符串,字符串仍然是以'\0'結尾的。 */ sds sdsempty(void) { return sdsnewlen("",0); } /* *從空字符串建立一個新的sds字符串 */ sds sdsnew(const char *init) { size_t initlen = (init == NULL)?0:strlen(init);
>return sdsnewlen(init,initlen);
}函數
/*操作系統
- 複製一個sds字符串 */ sds sdsdup(const sds s) { return sdsnewlen(s,strlen(s)); }
/*指針
- 釋放一個sds字符串,若是字符串爲空,不進行任何操做。 */ void sdsfree(sds s) { if(s == NULL) return; // zfree(s-sizeof(struct sdshdr));//這是源程序裏的釋放內存函數 free(s-sizeof(struct sdshdr));//這是本身改稱函數庫裏的函數 }
原型
void free(void *ptr) // 釋放ptr指向的存儲空間。
free能夠釋放calloc, malloc, realloc動態分配的空間,當你調用malloc、alloc分配內存時,不單單是從堆裏面分配獲得了可用內存,實際上內存管理子系統還維護了內存列表。
被釋放的空間一般被送入可用存儲區池。free()函數只是將參數指針指向的內存歸還給操做系統,並不會把參數指針置NULL。
內存這種底層資源都是由操做系統來管理的,而不是編譯器,編譯器只是向操做系統提出申請。
free函數並無能力去釋放真正的內存,只是通知操做系統它歸還了內存,而後操做系統就會修改內存分配表,對被free掉的內存從新進行管理,以方便下次分配。code
頭文件:
#include<stdlib.h>