cortex m - newlib-nano - 时间函数(堆使用)
cortex m - newlib-nano - time functions (HEAP USAGE)
我在 cortex m 系统上工作 (GCC+newlib-nano (-specs=nano.specs))。
我用
- 时间
- 时间
- 当地时间
我面临以下问题:
A.)
gmtime 使用 malloc 分配一些 ram,但永远不会再释放该内存。
B.)
另一方面,mktime 从来没有调用 malloc(或 sbrk)来分配内存,而是通过传递 nullptr 调用 free() 4 次,这是无稽之谈,因为它从来没有首先分配内存,而 free(nullptr) 不会做任何感觉。
我使用来自 arm-embedded 的最新 arm-none-eabi-gcc(版本 9)。
版本 9 中是否有任何 newlib 问题?
还能是什么?
现在,5个月后,我遇到了类似的问题并查看了它,那部分的实际源代码似乎是2014年的。
问题 A:
“gmtime 使用 malloc 分配一些 ram,但永远不会再释放该内存”
回答:
在 newlib 的“time_c”中有一个调用 malloc 的函数(除了 strftime):tzset_r.c。 malloc 调用 tzset 和 tzset 调用 ztset_r。这是关于时区的。在这个地方存储时区以检测变化(时区也从环境中读取,如果找到 none 则使用 GMT ist)。我不清楚,为什么静态存储指向具有该时区的已分配内存的指针,而不是静态存储时区字符串本身。也许是因为该字符串的长度可变,而这在“C”的早期语言版本中是不可能的。它被释放,时区改变但再次分配。
问题 B:“另一方面,mktime 不会调用 malloc(或 sbrk)来分配内存,而是通过传递 nullptr 调用 free() 4 次”
回答:strftime 和 tz_set 同时调用 malloc 和 free。旧指针最初设置为零。在检测到新时区并将其存储在新分配的内存中之前,旧时区会在没有任何检查的情况下被释放。因此 free without malloc 就会出现。调用 free(0).
有效
我只是遇到 (A) 的问题,因为它调用 malloc,我使用 STM32/FreeRTOS/TouchGFX,这似乎与 newlib 结合 FreeRTOS 和 malloc 有一些问题。因此,我也在寻找同样进行分配的“本地时间”的替代品。
(B) 根据实际的 C++ 标准应该不会出问题,但我不确定这是否总是正确的。
我在 cortex m 系统上工作 (GCC+newlib-nano (-specs=nano.specs))。
我用 - 时间 - 时间 - 当地时间
我面临以下问题:
A.) gmtime 使用 malloc 分配一些 ram,但永远不会再释放该内存。
B.) 另一方面,mktime 从来没有调用 malloc(或 sbrk)来分配内存,而是通过传递 nullptr 调用 free() 4 次,这是无稽之谈,因为它从来没有首先分配内存,而 free(nullptr) 不会做任何感觉。
我使用来自 arm-embedded 的最新 arm-none-eabi-gcc(版本 9)。 版本 9 中是否有任何 newlib 问题?
还能是什么?
现在,5个月后,我遇到了类似的问题并查看了它,那部分的实际源代码似乎是2014年的。
问题 A: “gmtime 使用 malloc 分配一些 ram,但永远不会再释放该内存”
回答: 在 newlib 的“time_c”中有一个调用 malloc 的函数(除了 strftime):tzset_r.c。 malloc 调用 tzset 和 tzset 调用 ztset_r。这是关于时区的。在这个地方存储时区以检测变化(时区也从环境中读取,如果找到 none 则使用 GMT ist)。我不清楚,为什么静态存储指向具有该时区的已分配内存的指针,而不是静态存储时区字符串本身。也许是因为该字符串的长度可变,而这在“C”的早期语言版本中是不可能的。它被释放,时区改变但再次分配。
问题 B:“另一方面,mktime 不会调用 malloc(或 sbrk)来分配内存,而是通过传递 nullptr 调用 free() 4 次”
回答:strftime 和 tz_set 同时调用 malloc 和 free。旧指针最初设置为零。在检测到新时区并将其存储在新分配的内存中之前,旧时区会在没有任何检查的情况下被释放。因此 free without malloc 就会出现。调用 free(0).
有效我只是遇到 (A) 的问题,因为它调用 malloc,我使用 STM32/FreeRTOS/TouchGFX,这似乎与 newlib 结合 FreeRTOS 和 malloc 有一些问题。因此,我也在寻找同样进行分配的“本地时间”的替代品。 (B) 根据实际的 C++ 标准应该不会出问题,但我不确定这是否总是正确的。