Zstd: IOS рдкрд░ ZSTD - 32 рдмрд┐рдЯреНрд╕ рдХреЗ рд▓рд┐рдП рд╕рдВрд░реЗрдЦрдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ?

рдХреЛ рдирд┐рд░реНрдорд┐рдд 26 рдЬреВрди 2018  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: facebook/zstd

рдирдорд╕реНрддреЗ

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, ZSTD рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

рдореИрдВ рдЕрдкрдиреЗ iOS рдРрдк рдореЗрдВ рдПрдХ рдХреНрд░реИрд╢рд░ рдХрд╛ рдкреАрдЫрд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЬреЛ ZSTD 1.3.4 рдХрд╛ рд▓рд╛рдн рдЙрдард╛рддрд╛ рд╣реИ, рдФрд░ рдореИрдВ рдХрднреА-рдХрднреА MEM_write32 рдореЗрдВ рдПрдХ рджреБрд░реНрдШрдЯрдирд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реВрдВ рдЬрдм рдХреЛрдИ рд╢рдмреНрджрдХреЛрд╢ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдВрджрд░реНрдн рдХреЗ рд╕рд╛рде рд╕рдВрдкреАрдбрд╝рд┐рдд рдХрд░рддрд╛ рд╣реИ:

    NSData* metadata = (snip)
    const size_t expectedCompressionSize = ZSTD_compressBound(metadata.length);

    UInt8* compressionBuffer = malloc(expectedCompressionSize);

    size_t const compressedSize = ZSTD_compressCCtx(compressionContext, compressionBuffer, expectedCompressionSize, metadata.bytes, (size_t) metadata.length, 1);

    // Hit error on compression use ZSTD_getErrorName for error reporting eventually.
    if(ZSTD_isError(compressedSize))
    {
        free(compressionBuffer);
        return nil;
    }

    NSData* zstdCompressedData = [[NSData alloc] initWithBytesNoCopy:compressionBuffer length:compressedSize freeWhenDone:YES];

рдХреНрдпрд╛ рдЖрдИрдУрдПрд╕ / рдЖрд░реНрдо рдкрд░ рддреИрдирд╛рддреА рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕рдВрд░реЗрдЦрдг рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдпрд╛ рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рд╣реИ? рдореИрдВрдиреЗ рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рдХреБрдЫ рд╕рдВрд░реЗрдЦрд┐рдд = 32 рджреЗрдЦрд╛ рд╣реИ, рд▓реЗрдХрд┐рди iOS рдХреЗ рд▓рд┐рдП рдбреЙрдХреНрд╕ рдореЗрдВ рдХреБрдЫ рдЦрд╛рд╕ рдирд╣реАрдВ рджреЗрдЦрд╛ рд╣реИред рдХреНрдпрд╛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХреНрд▓реИрдВрдЧ рд╕рдВрд░реЗрдЦрдг рд╣реИрдВ?

рдХреНрдпрд╛ рдзрд╛рд░рд╛рд╡рд╛рд╣рд┐рдХ рдкреНрд░реЗрд╖рдг рдХрддрд╛рд░ рдореЗрдВ рдПрдХ ZSTD_compressCCtx рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рдХреЛрдИ рдмрд╛рд░реАрдХрд┐рдпрд╛рдВ рд╣реИрдВ (рдПрдХ рднреА рдзрд╛рдЧрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рд╕рдВрджрд░реНрдн рдЙрджрд╛рд╣рд░рдг рдХреЗ рдПрдХ рдЧрд╛рд░рдВрдЯреАрдХреГрдд рдХреНрд░рдордмрджреНрдз рдордВрдЧрд▓рд╛рдЪрд░рдг рдЬреЛ рдХреБрдЫ рд╕рд┐рд╕реНрдЯрдо рдереНрд░реЗрдбреНрд╕ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрднреА рд╕рдорд╡рд░реНрддреА рдирд╣реАрдВ рд╣реЛрдЧрд╛)?

рдХрд┐рд╕реА рднреА рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

рд╕рднреА 3 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

MEM_write32() рдХреЛ рдХрд┐рд╕реА рднреА рд▓рдХреНрд╖реНрдп рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрд┐рд╕рдореЗрдВ рд╕рдЦреНрдд рд╕рдВрд░реЗрдЦрдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
рдХреБрдЫ рдЕрд╕рд╛рдорд╛рдиреНрдп рдХрдо рдмрд┐рдЬрд▓реА рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдХреБрдЫ рд╕реВрдХреНрд╖реНрдорддрд╛рдПрдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрдИрдУрдПрд╕ рд╡рд╛рд▓реЗ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рдХрд┐рд╕реА рднреА рд╕рдорд╕реНрдпрд╛ рдХреА рдЙрдореНрдореАрдж рдирд╣реАрдВ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдзрд┐рдХрд╛рдВрд╢ рдЖрдзреБрдирд┐рдХ рдЖрдИрдУрдПрд╕ рдбрд┐рд╡рд╛рдЗрд╕ рдПрдХ рдПрдЖрд░рдПрдо 64-рдмрд┐рдЯ рд╡реНрдпреБрддреНрдкрдиреНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдбреЗрд╕реНрдХрдЯреЙрдк рдПрдХреНрд╕ 86 рд╕реАрдкреАрдпреВ рдХреА рддрд░рд╣, рдмрд┐рдирд╛ рдкрддреЗ рдХреЗ рдкрдврд╝рдиреЗ / рд▓рд┐рдЦрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИред
рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдмрд╣реБрдд рдЖрд╢реНрдЪрд░реНрдп рд╣реЛрдЧрд╛ рдЕрдЧрд░ рд╕рдВрд░реЗрдЦрдг рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдПрдХ рдореБрджреНрджрд╛ рдерд╛ред

рдПрдХ рдФрд░ рд╕рдВрднрд╛рд╡рдирд╛ рдпрд╣ рд╣реИ рдХрд┐ MEM_write32() рдПрдХ рдЕрдирдзрд┐рдХреГрдд рдкрддреЗ рдкрд░ рд▓рд┐рдЦрддрд╛ рд╣реИред
рдРрд╕рд╛ рдХреНрдпреЛрдВ рд╣реЛрдЧрд╛ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИред
ZSTD_compressCCtx() рд╕реБрд░рдХреНрд╖рд┐рдд рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдмрдлрд░ рдУрд╡рд░рдлреНрд▓реЛ рд╣реЛрддрд╛ рд╣реИред

рдЖрдкрдиреЗ рдмрд╣реБ-рд╕реВрддреНрд░рд┐рдд рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рднреА рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИред
рдПрдХ рджрд┐рдП рдЧрдП рд╕рдВрджрд░реНрдн рдХреЛ рдПрдХ рд╕рдордп рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдереНрд░реЗрдб рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдпрд╣ рдереНрд░реЗрдб рдХреЛ рд╕реНрд╡рд┐рдЪ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдХреЛрдИ рднреА 2 рд╕реВрддреНрд░ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВред
рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдкрдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдХрд╛ рдзреНрдпрд╛рди рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдПред
рд▓реЗрдХрд┐рди рдореИрдВ рдлрд┐рд░ рд╕реЗ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдордВрддреНрд░рд┐рдд рдХрд░реВрдВрдЧрд╛ред
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рд╡рд░рдг рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдХрднреА-рдХрднреА рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдХреА рдЧрд╛рд░рдВрдЯреА рджреЗрдирд╛ рдмрд╣реБрдд рдХрдард┐рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдореИрдВ рдереНрд░реЗрдб рд╕реИрдирд┐рдЯрд╛рдЗрдЬрд╝рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдкрдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреВрдВрдЧрд╛ред рдпрд╣ рдХрд┐рд╕реА рднреА рдЧрд▓рдд рдЙрдкрдпреЛрдЧ рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЕрдЧрд░ рдХреЛрдИ рд╣реИред

ZSTD рд╕рдВрдкреАрдбрд╝рди рд╕рдВрджрд░реНрдн рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреЗ рд▓рд┐рдП WRT рд╕рдВрд░реЗрдЦрдг рдФрд░ рд╕реВрддреНрд░рдг рдХреЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреЗ рд▓рд┐рдП @ Cyan4973 рдзрдиреНрдпрд╡рд╛рджред рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдореИрдВ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдмрддрд╛рдП рдЧрдП рдирд┐рдпрдо рдХрд╛ рдкрд╛рд▓рди

рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдмрдЧ рдХреЗ рдмрдЬрд╛рдп рдПрдХ рдкреНрд░рд╢реНрди рдХреЗ рд░реВрдк рдореЗрдВ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рдорд╣рд╕реВрд╕ рдХрд░реЗрдВ, рдФрд░ рдЖрдкрдиреЗ рд╕реНрдкрд╖реНрдЯ рдХрд┐рдпрд╛ рд╣реИред рдпрджрд┐ рдореБрдЭреЗ рдХреЛрдИ рд╡рд┐рд╢рд┐рд╖реНрдЯ рджреБрд░реНрдШрдЯрдирд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдорд┐рд▓рддрд╛ рд╣реИ рддреЛ рдореИрдВ рдЕрд▓рдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдпрд╛ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдкреНрд░рд╢реНрди рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрддрд╛ рд╣реВрдВ, рддреЛ рдореИрдВ рдПрдХ рдирдпрд╛ 'рдмрдЧ' рдкреНрд░рд╕реНрддреБрдд рдХрд░реВрдВрдЧрд╛ред

рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЙрддреНрддрд░ рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░рддреЗ рд╣реИрдВред рдзрдиреНрдпрд╡рд╛рдж!

рдЖрдк рдХреВрдмрдбрд╝ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдорд░ рдЪреБрдХреЗ рд╣реИрдВ рдФрд░ рдереНрд░реЗрдбрд┐рдВрдЧ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред рдЧрдзреЗ рдХреЛ рдЯреНрд░рд┐рдкрд▓ рдЪреЗрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕