Force large c++ arrays into PSRAM

This is mostly targetted at leveldb_ which is rude and does not support
custom allocators
custom
jacqueline 2 years ago
parent a87790a424
commit 2849399d54
  1. 1
      src/util/CMakeLists.txt
  2. 29
      src/util/allocator.cpp

@ -3,5 +3,6 @@
# SPDX-License-Identifier: GPL-3.0-only
idf_component_register(
SRCS "allocator.cpp"
INCLUDE_DIRS "include"
REQUIRES "database")

@ -0,0 +1,29 @@
/*
* Copyright 2023 jacqueline <me@jacqueline.id.au>
*
* SPDX-License-Identifier: GPL-3.0-only
*/
#include <cstdint>
#include "esp_heap_caps.h"
void* operator new[](std::size_t sz) {
if (sz == 0) {
++sz; // avoid std::malloc(0) which may return nullptr on success
}
if (sz > 256) {
return heap_caps_malloc(sz, MALLOC_CAP_SPIRAM);
}
return heap_caps_malloc(sz, MALLOC_CAP_DEFAULT);
}
void operator delete[](void* ptr) noexcept {
heap_caps_free(ptr);
}
void operator delete[](void* ptr, std::size_t size) noexcept {
heap_caps_free(ptr);
}
Loading…
Cancel
Save