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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MISRA C ++(规则18-4-1)和动态内存分配 - 是否允许使用std :: string?相关的知识,希望对你有一定的参考价值。

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

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

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

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

答案

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

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

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


以上是关于MISRA C ++(规则18-4-1)和动态内存分配 - 是否允许使用std :: string?的主要内容,如果未能解决你的问题,请参考以下文章

cpp►动态内存分配与析构之复制构造函数/赋值运算符

Linux下C/C++编程开发静态库和动态库

Linux下C/C++编程开发静态库和动态库

Linux下C/C++编程开发静态库和动态库

C语言字符串常量,字符数组占内存大小问题?

C++--C++对象模型分析c++中的抽象类和接口