redis涓弬鑰冧簡(jiǎn)linux鍐呮牳鍏充簬閫氱敤list(list_head)鐨勫疄鐜版満鍒?瀹炵幇鏂規(guī)硶濡備笅:
struct sdshdr *sh = (void*) (sds-(sizeof(struct sdshdr)));
sds鏄繑鍥炵殑瀛楃涓插湴鍧錛屽嵆sdshdr->buf錛岀敤sds鐨勫湴鍧鍑忓幓鍏跺湪緇撴瀯浣撲腑鐨勫亸縐伙紝鍗沖彲寰楀埌sdshdr鐨勫湴鍧銆傜敱浜巄uf鍦╯dshdr緇撴瀯浣撶殑鏈鍚庯紝鎵浠ュ叾鍋忕Щ灝辨槸sizeof(len)+sizeof(free),璇ュ亸縐繪伆濂芥槸sizeof(struct sdshdr)銆?br />濡傛灉buf鍦╯dshdr涓殑浣嶇疆鏄換鎰忕殑錛屽浣曟牴鎹産uf鐨勫湴鍧鑾峰彇sdshdr鐨勫湴鍧鍛紵瀹炵幇濡備笅:
鍋囪鐜板湪sdshdr澹版槑濡備笅:
struct sdshdr
{
int len;
char buf[];
int free;
};
鍒檚dshdr鍦板潃濡備笅鑾峰彇錛?br />int offset_buf = (int)((struct sdshdr *)0)->buf;
struct sdshdr *sh =(struct sdshdr *)( (int)sdsbuf - offset_buf);
鍏朵腑sdsbuf鏄皟鐢╯dsnewlen()榪斿洖鐨刡uf鍦板潃銆傚嵆 sds sdsbuf = sdsnewlen(...);
((struct sdshdr *)0)->buf 琛ㄧず褰撶粨鏋勪綋sdshdr鍦ㄥ湴鍧0鏃訛紝buf鐩稿浜巗dshdr棣栧湴鍧鐨勫亸縐匯?/span>