mirror of
https://github.com/esphome/esphome.git
synced 2026-02-08 00:31:58 +00:00
f9542236e8ac4e2cc3982762202d2dfdb1c01a6d
Replace std::vector<uint8_t> with std::array on the stack for the receive buffer and std::span<const uint8_t> for packet listener callbacks. This eliminates a 508-byte heap allocation on every loop() iteration, reducing heap fragmentation on long-running devices. The callback signature changes from std::vector<uint8_t>& to std::span<const uint8_t>, which preserves API compatibility for user lambdas using data.size(), data.data(), data[i], and range-for. The trigger/automation type remains std::vector<uint8_t> so that deferred actions (e.g. delay) safely own their data. The listener lambda converts span to vector at the trigger boundary. PacketTransport::process_() now takes std::span<const uint8_t> directly, with implicit conversion from std::vector for other transports.
Description
Languages
C++
64.3%
Python
35.4%
C
0.2%
