memory.h 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. /*!
  2. \ingroup Memory
  3. \brief この関数はmalloc()と似ていますが、WolfSSLが使用するように構成されているメモリ割り当て関数を呼び出します。デフォルトでは、WolfSSLはmalloc()を使用します。これは、WolfSSLメモリ抽象化レイヤを使用して変更できます - wolfssl_setAllocator()を参照してください。注WOLFSSL_MALLOCは、WOLFSSLによって直接呼び出されませんが、代わりにMacro XMallocによって呼び出されます。デフォルトのビルドの場合、size引数のみが存在します。wolfssl_static_memoryビルドを使用する場合は、ヒープとタイプ引数が含まれます。
  4. \return pointer 成功した場合、この関数は割り当てられたメモリへのポインタを返します。
  5. \return error エラーがある場合は、NULLが返されます。
  6. \param size 割り当てるメモリのサイズ(バイト)
  7. \param heap メモリに使用するヒントヒント。nullになることができます
  8. _Example_
  9. \code
  10. int* tenInts = (int*)wolfSSL_Malloc(sizeof(int)*10);
  11. \endcode
  12. \sa wolfSSL_Free
  13. \sa wolfSSL_Realloc
  14. \sa wolfSSL_SetAllocators
  15. \sa XMALLOC
  16. \sa XFREE
  17. \sa XREALLOC
  18. */
  19. void* wolfSSL_Malloc(size_t size, void* heap, int type);
  20. /*!
  21. \ingroup Memory
  22. \brief この関数はfree()と似ていますが、WolfSSLが使用するように構成されているメモリフリー機能を呼び出します。デフォルトでは、WolfSSLはfree()を使用します。これは、WolfSSLメモリ抽象化レイヤを使用して変更できます - wolfssl_setAllocator()を参照してください。注WOLFSSL_FREEはWOLFSSLによって直接呼び出されませんが、代わりにマクロXFreeによって呼び出されます。デフォルトのビルドの場合、PTR引数のみが存在します。wolfssl_static_memoryビルドを使用する場合は、ヒープとタイプ引数が含まれます。
  23. \return none いいえ返します。
  24. \param ptr 解放されるメモリへのポインタ。
  25. \param heap メモリに使用するヒントヒント。nullになることができます
  26. _Example_
  27. \code
  28. int* tenInts = (int*)wolfSSL_Malloc(sizeof(int)*10);
  29. // process data as desired
  30. ...
  31. if(tenInts) {
  32. wolfSSL_Free(tenInts);
  33. }
  34. \endcode
  35. \sa wolfSSL_Alloc
  36. \sa wolfSSL_Realloc
  37. \sa wolfSSL_SetAllocators
  38. \sa XMALLOC
  39. \sa XFREE
  40. \sa XREALLOC
  41. */
  42. void wolfSSL_Free(void *ptr, void* heap, int type);
  43. /*!
  44. \ingroup Memory
  45. \brief この関数はREALLOC()と似ていますが、WolfSSLが使用するように構成されているメモリ再割り当て機能を呼び出します。デフォルトでは、WolfSSLはRealLoc()を使用します。これは、WolfSSLメモリ抽象化レイヤを使用して変更できます - wolfssl_setAllocator()を参照してください。注WOLFSSL_REALLOCはWOLFSSLによって直接呼び出されませんが、代わりにマクロXreallocによって呼び出されます。デフォルトのビルドの場合、size引数のみが存在します。wolfssl_static_memoryビルドを使用する場合は、ヒープとタイプ引数が含まれます。
  46. \return pointer 成功した場合、この関数はマイポイントを再割り当てするためのポインタを返します。これはPTRと同じポインタ、または新しいポインタの場所であり得る。
  47. \return Null エラーがある場合は、NULLが返されます。
  48. \param ptr 再割り当てされているメモリへのポインタ。
  49. \param size 割り当てるバイト数。
  50. \param heap メモリに使用するヒントヒント。nullになることができます
  51. _Example_
  52. \code
  53. int* tenInts = (int*)wolfSSL_Malloc(sizeof(int)*10);
  54. int* twentyInts = (int*)wolfSSL_Realloc(tenInts, sizeof(int)*20);
  55. \endcode
  56. \sa wolfSSL_Free
  57. \sa wolfSSL_Malloc
  58. \sa wolfSSL_SetAllocators
  59. \sa XMALLOC
  60. \sa XFREE
  61. \sa XREALLOC
  62. */
  63. void* wolfSSL_Realloc(void *ptr, size_t size, void* heap, int type);
  64. /*!
  65. \ingroup Memory
  66. \brief この機能は、WolfSSLが使用する割り当て関数を登録します。デフォルトでは、システムがそれをサポートしている場合、Malloc / FreeとRealLocが使用されます。この機能を使用すると、実行時にユーザーは独自のメモリハンドラをインストールできます。
  67. \return Success 成功した場合、この関数は0を返します。
  68. \return BAD_FUNC_ARG 関数ポインタが提供されていない場合に返されるエラーです。
  69. \param malloc_function 使用するWolfSSLのメモリ割り当て機能関数署名は、上記のwolfssl_malloc_cbプロトタイプと一致する必要があります。
  70. \param free_function 使用するWolfSSLのメモリフリー機能関数シグネチャは、上記のwolfssl_free_cbプロトタイプと一致する必要があります。
  71. _Example_
  72. \code
  73. static void* MyMalloc(size_t size)
  74. {
  75. // custom malloc function
  76. }
  77. static void MyFree(void* ptr)
  78. {
  79. // custom free function
  80. }
  81. static void* MyRealloc(void* ptr, size_t size)
  82. {
  83. // custom realloc function
  84. }
  85. // Register custom memory functions with wolfSSL
  86. int ret = wolfSSL_SetAllocators(MyMalloc, MyFree, MyRealloc);
  87. if (ret != 0) {
  88. // failed to set memory functions
  89. }
  90. \endcode
  91. \sa none
  92. */
  93. int wolfSSL_SetAllocators(wolfSSL_Malloc_cb,
  94. wolfSSL_Free_cb,
  95. wolfSSL_Realloc_cb);
  96. /*!
  97. \ingroup Memory
  98. \brief この機能は、静的メモリ機能が使用されている場合(--enable-staticMemory)の場合に使用できます。メモリの「バケット」に最適なバッファサイズを示します。これにより、パーティション化された後に追加の未使用のメモリが終了しないように、バッファサイズを計算する方法が可能になります。返された値は、正の場合、使用するコンピュータのバッファサイズです。
  99. \return Success バッファサイズ計算を正常に完了すると、正の値が返されます。この返された値は最適なバッファサイズです。
  100. \return Failure すべての負の値はエラーの場合と見なされます。
  101. \param buffer バッファへのポインタ
  102. \param size バッファのサイズ
  103. _Example_
  104. \code
  105. byte buffer[1000];
  106. word32 size = sizeof(buffer);
  107. int optimum;
  108. optimum = wolfSSL_StaticBufferSz(buffer, size, WOLFMEM_GENERAL);
  109. if (optimum < 0) { //handle error case }
  110. printf(“The optimum buffer size to make use of all memory is %d\n”,
  111. optimum);
  112. ...
  113. \endcode
  114. \sa wolfSSL_Malloc
  115. \sa wolfSSL_Free
  116. */
  117. int wolfSSL_StaticBufferSz(byte* buffer, word32 sz, int flag);
  118. /*!
  119. \ingroup Memory
  120. \brief この機能は、静的メモリ機能が使用されている場合(--enable-staticMemory)の場合に使用できます。メモリの各パーティションに必要なパディングのサイズを示します。このパディングサイズは、メモリアライメントのために追加のメモリ管理構造を含む必要があるサイズになります。
  121. \return On 正常なメモリパディング計算戻り値は正の値になります
  122. \return All 負の値はエラーケースと見なされます。
  123. _Example_
  124. \code
  125. int padding;
  126. padding = wolfSSL_MemoryPaddingSz();
  127. if (padding < 0) { //handle error case }
  128. printf(“The padding size needed for each \”bucket\” of memory is %d\n”,
  129. padding);
  130. // calculation of buffer for IO POOL size is number of buckets
  131. // times (padding + WOLFMEM_IO_SZ)
  132. ...
  133. \endcode
  134. \sa wolfSSL_Malloc
  135. \sa wolfSSL_Free
  136. */
  137. int wolfSSL_MemoryPaddingSz(void);