μλ νμΈμ
첫째, ZSTDμ κ°μ¬λ립λλ€!
λλ ZSTD 1.3.4λ₯Ό νμ©νλ iOS μ±μμ ν¬λμ λ₯Ό μ«μ μκ³ , μ¬μ μ΄μλ 컨ν μ€νΈλ‘ μμΆ ν λ κ°λ 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];
iOS / Armμ λ°°ν¬νκΈ°μν μ λ ¬ μꡬ μ¬νμ΄λ λμμ€κ° μμ΅λκΉ? make νμΌμμ λͺ κ°μ§ align = 32λ₯Ό λ°κ²¬νμ§λ§ iOS μ© λ¬Έμμμλ ꡬ체μ μΈ λ΄μ©μ λ³΄μ§ λͺ»νμ΅λλ€. νΉμ clang μ λ ¬μ΄ μμ΅λκΉ?
μ§λ ¬ λμ€ν¨μΉ νμμ ZSTD_compressCCtxλ₯Ό μ¬μ©νλ κ²κ³Ό κ΄λ ¨νμ¬ λμμ€κ° μμ΅λκΉ (λ¨μΌ μ€λ λκ° μλλΌ λͺ κ°μ μμ€ν μ€λ λμμ μ¬μ©ν μ μμ§λ§ λμ μ μ΄ μ§ μμ 컨ν μ€νΈ μΈμ€ν΄μ€μ 보μ₯ λ μ§λ ¬ νΈμΆ)?
μ 보 κ°μ¬ν©λλ€!
MEM_write32()
μ (λ) μ격ν μ λ ¬μ΄ νμν λμμ ν¬ν¨νμ¬ λͺ¨λ λμμμ μλνλλ‘λμ΄ μμ΅λλ€.
ννμ§ μμ μ μ λ ₯ μ₯μΉμλ μ½κ°μ λ―Έλ¬ν μ°¨μ΄κ°μμ μ μμ§λ§ iOS μ₯μΉμ κ²½μ° λ¬Έμ κ° μμ κ²μΌλ‘ μμλ©λλ€. κ²λ€κ° λλΆλΆμ μ΅μ iOS μ₯μΉλ λ°μ€ν¬ν± x86 CPUμ κ°μ΄ μ λ ¬λμ§ μμ μ£Όμμμ μ½κ³ μΈ μμλ ARM 64 λΉνΈ νμλ¬Όμ μ¬μ©ν©λλ€.
λ°λΌμμ΄ κ²½μ° μ λ ¬μ΄ λ¬Έμ κ°λλ€λ©΄ λ§€μ° λλ κ²μ
λλ€.
λ λ€λ₯Έ κ°λ₯μ±μ MEM_write32()
κ° μΉμΈλμ§ μμ μ£Όμμ μ°λ κ²μ
λλ€.
μ μΌμ΄λ μ§λ λΆλͺ
νμ§ μμ΅λλ€.
ZSTD_compressCCtx()
λ λ²νΌ μ€λ² νλ‘μ° λλΉ μμ ν΄μΌν©λλ€.
λ€μ€ μ€λ λ νκ²½μμ μμ
νλ κ²λ μΈκΈν©λλ€.
μ£Όμ΄μ§ 컨ν
μ€νΈλ ν λ²μ νλμ μ€λ λμμλ§ μ¬μ©ν΄μΌν©λλ€.
μ€λ λλ₯Ό μ ν ν μ μμ΅λλ€. κ·Έλ¬λ μ λ§ μ€μν κ²μ 2 κ°μ μ€λ λκ° λμμ μ¬μ©ν΄μλ μλλ€λ κ²μ
λλ€.
κ·νμ ꡬνμ΄μ΄ 쑰건μ μ²λ¦¬ν΄μΌνλ€λ κ²μ μ΄ν΄ν©λλ€.
κ·Έλ¬λ λλ λ€μ 보λλ‘ κΆν κ²μ
λλ€.
λλ‘λ ꡬν μΈλΆ μ¬νμ λ°λΌ μ΄λ¬ν 쑰건μ 보μ₯νκΈ°κ° λ§€μ° μ΄λ €μΈ μ μμ΅λλ€.
μ€λ λ μλ νμ΄ μ λ₯Ό μ¬μ©νμ¬ μ ν리μΌμ΄μ μ μ€ννλ κ²μ΄ μ’μ΅λλ€. μλͺ»λ μ¬μ©μ΄μλ κ²½μ° νλκ·Έλ₯Ό μ§μ ν μ μμ΄μΌν©λλ€.
ZSTD μμΆ μ»¨ν μ€νΈμ μ‘μΈμ€νκΈ°μν WRT μ λ ¬ λ° μ€λ λ©μ λν μ€λͺ μ λν΄ @ Cyan4973 μκ² κ°μ¬λ립λλ€. λλ λΉμ μ΄ μΈκΈ ν κ·μΉμ λ°λ₯Έ λ€κ³ λ―Ώλλ€ (λ€μν μ€λ λμ κ±ΈμΉ μ격νκ² μ§λ ¬ μ‘μΈμ€μλ μμ νμ§λ§ λμ μ‘μΈμ€μλ μ λμ μΌλ‘ μμ νμ§ μμ). λλ λν κ·Έκ²μ΄ μ¬μ€μμ 보μ₯νλ κ²μ΄ μΌλ§λ μ΄λ €μ΄μ§ μκ³ μμ΅λλ€ :) Apples libDispatch / Grand Central Dispatchλ₯Ό ν΅ν dispatch_asyncλ μ격ν μ€μλ₯Ό νμ©ν΄μΌνμ§λ§ μλ§λ λ΄κ° μκ°νλ κ²μ²λΌ 맀λλ½μ§ μμ κ²μ λλ€ :)
λ²κ·Έκ° μλ μ§λ¬ΈμΌλ‘μ΄ λ¬Έμ λ₯Ό μ’ κ²° ν΄ μ£ΌμκΈ° λ°λλλ€. 격리 ν μμλ νΉμ μΆ©λ λμμ μ°Ύκ±°λ μΆκ° μ§λ¬Έμνλ κ²½μ° μ 'λ²κ·Έ'λ₯Ό μ μΆνκ² μ΅λλ€.
μ² μ ν λ΅λ³ κ°μ¬ν©λλ€. κ°μ¬ν©λλ€!
λΉμ μ μ§κ°μ΄ μμ ν μ£½μκ³ μ€λ λ©μ΄ κΉλ€ λ‘μ΅λλ€. μΈ λ² νμΈνκΈ° μν΄ μλ©μ΄λ₯Ό κ±·μ΄μ°¨ μ£Όμ μ κ°μ¬ν©λλ€.