Отсутствие динамической аллокации в embedded мире

Когда мы разрабатываем под embedded, нам приходится сталкиваться с такими флагами компиляции как -nostdlib -fno-exceptions -fno-rtti. Во многих средах нет malloc/free (new/delete) и вообще нет встроенного выделения памяти. Использование «больших» стандартных контейнеров C++ (например, std::vector) нередко исключено В результате приходится решать задачу «ручного» управления памятью. Ниже рассмотрим два подхода:

https://habr.com/ru/articles/918122/

#C++ #embedded #placement_new #heap #backend

Отсутствие динамической аллокации в embedded мире

Когда мы разрабатываем под embedded, нам приходится сталкиваться с такими флагами компиляции как -nostdlib -fno-exceptions -fno-rtti . Во многих средах нет malloc/free (new/delete) и вообще нет...

Хабр

C++26: more constexpr in the core language | Hacker News

LinkC++26:核心語言中更多 constexpr 功能的演進
https://sandordargo.com/cpp26-more-constexpr-in-the-core-language

📌 Summary:
自 C++11 引入 constexpr 以來,constexpr 的應用範圍持續擴大,從最初不支援 if、else、迴圈,到 C++14 允許控制流程,C++17 支援 constexpr lambdas,C++20 更進一步允許動態配置和使用 std::vector 及 std::string。到了 C++26,constexpr 功能獲得更多強化,包括可在常數表達式中從 void 做指標轉型(P2738R1)、支援在 constexpr 中使用 placement new(P2747R2),以及允許宣告 constexpr structured bindings 且放寬 constexpr 參考的綁定規則(P2686R5)。這些語言層面的改變將使更多標準函式庫類型和功能能在編譯期進行運算,進一步提升程式碼效率與安全性。此外,未來還將探討 constexpr 支援例外處理與標準函式庫的延伸。此演進不僅推動編譯期編程由傳統模板技巧轉為更直觀且可驗證的方式,也為編譯器實作帶來新挑戰。

🎯 Key Points:
→ P2738R1:C++26 允許在 constexpr 表達式中從 void 指標轉型到物件實際類型的指標,限制不可轉向不同類型或基類指標。此設計可支援更多標準函式庫元件(如 std::format、std::function、std::any)在編譯期運作,主要因為 void 用於減少模板實例化和二進位符號數量的「編譯防火牆」技巧。
→ P2747R2:新增 constexpr 版本的 placement new,可彌補 std::construct_at 僅支援值初始化的不足,使得在 constexpr 環境下更靈活地進行物件預置建立。此功能須仰賴 P2738R1 中 void 指標轉型的支持解決類型轉換問題。
→ P2686R5:允許宣告 constexpr structured bindings,並放寬 constexpr 參考綁定規則。constexpr 參考可綁定於自動存取期間且相對於堆疊框架地址不變的變數,但例如 lambda 捕獲的外層變數因無法確定常數地址而不符條件,故有限制。此改進讓 constexpr 編寫更靈活、結構化。
→ 綜合以上,C++26 大幅推動 constexpr 技術由語言核心擴展,為日後標準函式庫更多 constexpr 化奠定基礎,並促進從繁複模板元編程向更語義明確、編譯期安全的編程模式轉變。
→ 使用者與開發者須留意編譯器實作狀況,目前多數主流編譯器對 C++20 甚至 C++23 支援仍未完全,C++26 的新功能落地仍需時間。
→ 文章後續將描述標準函式庫的 constexpr 支援演進,以及 constexpr 例外處理的相關變化,需結合語言與函式庫面雙重改良。

🔖 Keywords:
#constexpr #C++26 #void轉型 #placement_new #structured_bindings

C++26: more constexpr in the core language | Hacker News