Mbed TLS中分配内存的替代方法(替代malloc calloc()/free)

原文链接

Alternative ways of allocating memory in Mbed TLS — Mbed TLS documentation

在某些情况下,比如当嵌入式平台上没有操作系统时,堆或calloc()/free()并没有真正的可用性。Mbed TLS仍然需要某种形式的动态内存分配来操作SSL堆栈。我们可以假设所有结构的最大尺寸,但这将消耗大量的内存空间。相反,我们选择让Mbed TLS只使用钩子来分配和释放动态内存。

目前您有两种选择:

  1. 提供你自己的分配和释放函数。

  2. 使用Mbed TLS中的缓冲分配器(buffer allocator )功能。

要启用内存分配层,请定义MBEDTLS_PLATFORM_CMBEDTLS_PLATFORM_MEMORYmbedtls_config.h里。看见如何配置Mbed TLS.

如果不启用layer,libc标准calloc()free()被使用。

内部构件

在内部,只有两个函数指针mbedtls_calloc()mbedtls_free()在Mbed TLS中为每次动态内存分配或取消分配调用。

extern void * (*mbedtls_calloc)( size_t n, size_t size );
extern void (*mbedtls_free)( void *ptr );

这些函数的原型与libc标准calloc()free()。没有任何进一步的调用,默认libc这些指针被赋予了名称。

没有libc等价物

如果您的系统没有libc等效地,您将得到如下编译错误calloc()或者free()找不到。

定义MBEDTLS_PLATFORM_NO_STD_FUNCTIONSmbedtls_config.h文件里阻止Mbed TLS了解这些功能。

提供你自己的钩子

如果您的操作系统已经提供了libc分配器函数,您可以使用以下命令来设置它们:

int mbedtls_platform_set_calloc_free( void * (*calloc_func)( size_t, size_t ),
                                      void (*free_func)( void * ) );

使用Mbed TLS缓冲分配器

如果希望Mbed TLS分配静态缓冲区内的所有内容,可以通过定义MBEDTLS_MEMORY_BUFFER_ALLOC_C在……里mbedtls_config.h文件。

在调用任何其他Mbed TLS函数之前,按如下方式启用缓冲分配器:

unsigned char memory_buf[100000];
mbedtls_memory_buffer_alloc_init( memory_buf, sizeof(memory_buf) );

安全警告

缓冲区分配器是动态内存分配器的一种简单方法。没有实现特殊的堆保护机制。

在别处使用缓冲区分配器

缓冲分配器本身不依赖于Mbed TLS的任何其他部分。因此,您也可以在自己的代码库中使用它。

你可能感兴趣的:(c语言,算法)