anchor.diff:    LargeMPool: TDxMemoryPool = nil;
     SPLargeMPool: TDxMemoryPool = nil;
     MaxMPool: TDxMemoryPool = nil;
  +
  +
  +/// <summary>
  +///   utils.strings
  +///   PSubPгֵĵһλ
  +/// </summary>
  +/// <returns>
  +///   ҵ, ָһpvSubλ
  +///   Ҳ Nil
  +/// </returns>
  +/// <param name="pvSource">  </param>
  +/// <param name="pvSourceLen"> ݳ </param>
  +/// <param name="pvSub"> ҵ </param>
  +/// <param name="pvSubLen"> ҵݳ </param>
  +function SearchPointer(pvSource: Pointer; pvSourceLen, pvStartIndex: Integer;
  +    pvSub: Pointer; pvSubLen: Integer): Pointer;
  +var
  +  I, j, l: Integer;
  +  lvTempP, lvTempPSub, lvTempP2, lvTempPSub2:PByte;
  +begin
  +  if (pvSub = nil) then
  +    Result := nil
  +  else
  +  begin
  +    Result := nil;
  +    j := 0;
  +    lvTempP := PByte(pvSource);
  +    Inc(lvTempP, pvStartIndex);
  +
  +    lvTempPSub := PByte(pvSub);
  +    while j<pvSourceLen do
  +    begin
  +      if lvTempP^ = lvTempPSub^ then
  +      begin
  +        I := 1;     // ӺڶַʼԱ
  +        lvTempP2 := lvTempP;
  +        Inc(lvTempP2);
  +
  +        lvTempPSub2 := lvTempPSub;
  +        Inc(lvTempPSub2);
  +        while (I < pvSubLen) do
  +        begin
  +          if lvTempP2^ = lvTempPSub2^ then
  +            Inc(I)
  +          else
  +            Break;
  +        end;
  +
  +        if I = pvSubLen then
  +        begin  // P1P2Ѿƥ䵽ĩβ(ƥɹ)
  +          Result := lvTempP;
  +          Break;
  +        end;
  +      end;
  +      Inc(lvTempP);
  +      inc(j);
  +    end;
  +  end;
  +end;
   
   
   function CalcMemType(MemSize: Integer): TDxMemBlockType;
  
positive.code:     ///   һ
      /// </summary>
      function Skip(len:Cardinal): Cardinal;
      procedure clearBuffer;
      procedure clearHaveReadBuffer;
  
  
negative.code: begin
    FMark := FRead;
    FMarkPosition := FReadPosition;
  end;
  
  function TBufferLink.SearchBuffer(subBuf:PAnsiChar; subBufLen:Cardinal):
      Integer;
  var
    lvBufBlock: PMemoryBlock;
  
    lvPRes:Pointer;
  
    l, x, lvPosition:Cardinal;
  begin
    Result := -1;
    l := 0;
  
    lvBufBlock := FRead;
    lvPosition := FReadPosition;
  
    if lvBufBlock = nil then
    begin   // ͷʼ
      lvBufBlock := FHead;
      lvPosition := 0;
    end;
  
    if lvBufBlock <> nil then
    begin
      while lvBufBlock <> nil do
      begin
        lvPRes := SearchPointer(lvBufBlock.Memory, lvBufBlock.DataLen, lvPosition, subBuf, subBufLen);
        if lvPRes <> nil then
        begin
          x := PAnsiChar(lvPRes) - PAnsiChar(lvBufBlock.Memory) - lvPosition;
          Result := l + x;
          Break;
        end else
        begin
          l := l + lvBufBlock.DataLen - lvPosition;
  
          // һ
          lvBufBlock := lvBufBlock.NextEx;
          lvPosition := 0;
        end;
      end;
    end;
  end;
  
  function TBufferLink.validCount: Integer;
  