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

问题描述 投票:2回答:1

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

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

见:http://dist.sonarsource.com/reports/coverage/misra_c++_2008.html

根据这个规则,std::string是否允许在MISRA C ++规则下,因为std::string确实在字符串变大时分配内存。还有像std::stringstream这样的课程呢?

c++ embedded heap-memory misra
1个回答
3
投票

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

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

因此,如果您在嵌入式系统中询问“我可以使用std :: stringstream”,那么您已经来自一个不好的前提,不应该为安全关键设备编写软件。


© www.soinside.com 2019 - 2024. All rights reserved.