From c4d9c468842eb8d316754a2798459732355b6a98 Mon Sep 17 00:00:00 2001 From: Shang Zhou Date: Tue, 17 Oct 2023 16:10:25 +0800 Subject: [PATCH] docs: Update CN translation for heap_debug.rst --- docs/zh_CN/api-reference/system/heap_debug.rst | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/docs/zh_CN/api-reference/system/heap_debug.rst b/docs/zh_CN/api-reference/system/heap_debug.rst index 6f14173f1f..9a01d6328a 100644 --- a/docs/zh_CN/api-reference/system/heap_debug.rst +++ b/docs/zh_CN/api-reference/system/heap_debug.rst @@ -154,6 +154,11 @@ ESP-IDF 集成了用于请求 :ref:`堆内存信息 `、:ref:` 如果检查到字节与上述值不同,通常表示缓冲区越界或下溢。其中越界表示在写入内存时,写入的数据超过了所分配内存的大小,导致写入到了未分配的内存区域;下溢表示在读取内存时,读取的数据超出了所分配内存的范围,读取了未分配的内存区域的数据。 +.. only:: CONFIG_ESP_ROM_HAS_HEAP_TLSF + + .. warning:: + + 需注意,使用 TLSF 堆的 ROM 实现时,:cpp:func:`heap_caps_check_integrity` 不会对 canary 字节执行检查。 全面检测模式 +++++++++++++++++++ @@ -179,6 +184,12 @@ ESP-IDF 集成了用于请求 :ref:`堆内存信息 `、:ref:` - 对于已释放的堆内存块,检测器会检查是否所有字节都设置为 ``0xFE``,检测到任何其他值都表示错误写入了已释放内存。 - 对于已分配的堆内存块,检测器的检查模式与轻微影响模式相同,即在每个分配的缓冲区头部和尾部检查 canary 字节 ``0xABBA1234`` 和 ``0xBAAD5678``,检测到任何其他字节都表示缓冲区越界或下溢。 +.. only:: CONFIG_ESP_ROM_HAS_HEAP_TLSF + + .. warning:: + + 需注意,使用 TLSF 堆的 ROM 实现时,:cpp:func:`heap_caps_check_integrity` 不会对 canary 字节执行检查。 + .. _heap-task-tracking: 堆任务跟踪 @@ -280,7 +291,7 @@ ESP-IDF 集成了用于请求 :ref:`堆内存信息 `、:ref:` total allocations 2 total frees 0 .. note:: - + 以上示例输出使用 :doc:`IDF 监视器 `,自动将 PC 地址解码为其源文件和行号。 第一行表示与缓冲区的总大小相比,缓冲区内的分配条目数量。 @@ -505,7 +516,7 @@ ESP-IDF 集成了用于请求 :ref:`堆内存信息 `、:ref:` - 系统中的其他任务也可能进行内存分配。根据这些任务的时间安排,报错的这部分内存很可能在调用 :cpp:func:`heap_trace_stop` 后释放。 - 当任务第一次使用 stdio,如调用 :cpp:func:`heap_caps_printf` 时,libc 会分配一个锁,即 RTOS 互斥信号量,该分配将持续至任务删除。 - 进行打印浮点数等调用 :cpp:func:`heap_caps_printf` 的操作时,会根据需要,从堆中分配一些内存,这些分配将持续至任务删除。 -- 蓝牙、Wi-Fi 和 TCP/IP 库会分配堆内存缓冲区,处理传入或传出的数据,这些内存缓冲区通常持续时间较短。但如果在运行堆内存泄漏跟踪期间,网络底层接收或发送了数据,一些缓冲区可能会出现在堆内存泄漏跟踪输出中。 +- 蓝牙、Wi-Fi 和 TCP/IP 库会分配堆内存缓冲区,处理传入或传出的数据,这些内存缓冲区通常持续时间较短。但如果在运行堆内存泄漏跟踪期间,网络底层接收或发送了数据,一些缓冲区可能会出现在堆内存泄漏跟踪输出中。 - 由于存在 ``TIME_WAIT`` 状态,TCP 连接在关闭后仍会使用一些内存,``TIME_WAIT`` 状态结束后将释放这些内存。 要区分“真实”和“误报”的内存泄漏,可以在堆内存跟踪运行时多次调用可疑代码,并在堆内存跟踪输出中查找重复出现的内存分配情况。