我正在研究编程ESP8266串行wifi芯片。在其SDK示例中,它广泛使用了一个名为os_zalloc
的函数,我期望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
答案 0 :(得分:7)
由于os_zalloc
是一个宏,并且定义在mem.h中给出,因此更好的问题是关于pvPortZalloc
的作用。
鉴于函数名称pvPortMalloc
,vPortFree
和pvPortZalloc
,使用的操作系统似乎是FreeRTOS(或者是商业许可的等效OpenRTOS),这是记录在案的 - 尽管没有具体说明pvPortZalloc
,但如果不是简单地分配和零初始化就会很奇怪 - 例如它意味着here。这些函数是FreeRTOS的目标移植层的一部分,通常不会被应用程序级调用,但我想这里宏包装器用于访问应用程序用户的移植层代码而不是写两次。
在RTOS内核中,需要RTOS感知动态内存分配函数来确保线程安全,尽管一些标准库实现包含使用RTOS互斥调用实现的线程安全存根,这是一种更好的方法,因为现有的库和C ++ {{ 1}} / new
可以更容易使用。
答案 1 :(得分:4)
我会说"分配内存并填充零"