MISRA C++(规则 18-4-1)和动态内存分配 - 是否允许 std::string



MISRA C++规则 18-4-1 说:

不应使用动态堆内存分配。

请参阅:http://dist.sonarsource.com/reports/coverage/misra_c++_2008.html

根据此规则,MISRA C++规则std::string允许的,因为随着字符串变大std::string确实会分配内存。另外,像std::stringstream这样的班级呢?

不,不允许托管std::stringstd::stringstream。如果你是在嵌入式系统上编程的,你不太可能使用这些结构。嵌入式系统很少需要完整的标准库(尤其是像std::stringstream这样笨重和缓慢的东西(以及随之而来的一切,包括RTTI,异常,动态内存分配等。

如果您使用的是某种类型的 STL,它要么是手写的,要么是专门针对嵌入式系统的。更有可能的是,他们将使用静态内存分配器或其他策略,而不是动态分配,除非您正在编写操作系统内核。

所以,如果你问"我可以在嵌入式系统中使用std::stringstream吗",你已经来自一个糟糕的前提,不应该为安全关键设备编写软件。


最新更新