Saf*_*ari 3 c++ memory-management misra new-operator static-memory-allocation
我需要一些有关c ++内存管理和MISRA指南的说明。
我必须实现一个与MISRA兼容的程序,因此我必须遵守一条重要规则:不可能使用“ new”运算符(动态内存堆)。
在这种情况下,对于任何自定义对象,我必须使用静态分配:
例如:
我的班上Student有一个构造函数Student(int age)。每当我必须实例化Student对象时,都必须采用这种方式:
int theAge = 18;
Student exampleOfStudent(theAge);
Run Code Online (Sandbox Code Playgroud)
这将创建一个Student对象exampleOfStudent。这样,我不必担心我不使用析构函数。这一切对吗?还有其他使用静态内存管理的方法吗?我可以以相同的方式使用std :: vector或其他数据结构吗?我是否可以将例如Student实例(我作为Student exampleOfStudent(theAge)创建的实例)添加到std :: vector中。
Student exampleOfStudent(theAge); 是自动变量,不是静态变量。
据我所记得,MISRA规则禁止所有形式的动态内存。这包括malloc和new 和 std::vector(使用默认分配器)。
您只剩下自动变量和静态变量。
如果您的系统的RAM数量有限,则您不希望使用动态内存,因为这样可能会导致您请求的内存超出可用内存的风险。堆碎片也是一个问题。这可以防止编写可证明正确的代码。如果将变量与自动或静态存储一起使用,则静态分析应用程序可以例如输出应用程序将使用的最大内存量。您可以根据系统RAM检查该号码。