037、内存分配优化:静态分配 vs 动态分配 嵌入式NPU原理基础(037):内存分配优化——静态分配 vs 动态分配一、一次让我熬夜到凌晨三点的NPU崩溃去年做一款AI摄像头产品,NPU跑YOLOv5s做实时检测。一切顺利,直到量产前一周,某批次设备在运行2小时后突然死机。看门狗复位,日志里只有一行“NPU memory allocation failed”。更诡异的是,同样的固件,另一批设备跑48小时都没事。我盯着示波器上的NPU时钟波形,突然意识到问题不在算法,而在内存分配策略。那批出问题的设备,恰好是内存颗粒批次不同、可用堆空间略小的版本。动态分配在NPU驱动层埋下的雷,终于炸了。二、NPU内存分配的特殊性——别拿MCU那套来套很多从MCU转过来的兄弟,习惯性认为“malloc/free”是万能的。但在NPU场景下,这套逻辑会出大问题。NPU的内存管理有三个致命约束:1. 物理连续性是硬需求NPU的DMA引擎通常不支持虚拟地址映射。你申请一块内存,必须是物理连续的。标准malloc返回的堆内存,在碎片化后大概率不连续。我见过最离谱的情况:申请4KB连续内存,系统返回了3个不连续的物理页,NPU直接挂掉。2. 对齐要求极其苛刻NPU的权重数据、激活值缓冲区,往往要求64字节甚至128字节对齐。普通malloc只保证8字节或16字节对齐。你传个不对齐的地址进去,NPU要么性能暴跌,要么直接报“alignment fault”。