6

我正在研究对 ESP8266 串行 wifi 芯片进行编程。在其 SDK 示例中,它广泛使用了一个名为os_zallocwhere I would expect的函数malloc

不过,偶尔os_malloc也会使用。所以它们在功能上似乎并不相同。

不幸的是,没有文档。任何人都可以从以下头文件中做出有根据的猜测吗?

#ifndef __MEM_H__
#define __MEM_H__

//void *pvPortMalloc( size_t xWantedSize );
//void vPortFree( void *pv );
//void *pvPortZalloc(size_t size);

#define os_malloc   pvPortMalloc
#define os_free     vPortFree
#define os_zalloc   pvPortZalloc

#endif
4

2 回答 2

8

因为os_zalloc是一个宏,并且定义在 mem.h 中给出,一个更好的问题是关于做什么pvPortZalloc

给定函数名称pvPortMallocvPortFree并且pvPortZalloc看起来正在使用的操作系统是 FreeRTOS(或者它是商业许可的等效 OpenRTOS),它已记录在案 - 虽然没有具体说明pvPortZalloc,但如果它不是简单地分配和零初始化,那就很奇怪- 即例如这里的意思。这些函数是 FreeRTOS 目标移植层的一部分,通常不会被应用程序级别调用,但我想这里的宏包装器用于访问应用程序用户的移植层代码,而不是编写两次。

在 RTOS 内核中,需要 RTOS 感知动态内存分配函数来确保线程安全,尽管一些标准库实现包括使用 RTOS 互斥调用实现的线程安全存根,这是一种更好的方法,因为现有的库和 C++ new/delete可以更容易用过的。

于 2015-01-10T23:15:08.160 回答
4

我会说“分配内存并用零填充”

于 2015-01-10T21:21:59.083 回答