在C++中有效使用堆栈与堆内存分配
Effective use of stack vs. heap memory allocation in C++
我正在开发一个大型的复杂模型(主要是简单的数学,主要是代数,但有很多计算(。 我做了最初的出价,假设我必须做所有事情一次,但现在范围已经扩大,我需要多次运行整个模型(在同一组基本假设上,但使用不同的数据集(。
根据我最初的需要,我创建了一堆类,然后在我的主函数中创建这些类的动态实例,并在我使用时通过引用将它们传递给每个函数。 这样,在主函数结束时,一旦所有函数都运行,我就可以执行所有必要的报告/输出。 我的问题是关于现在如何修改我的 main 函数以允许多次迭代。 下面是一些示例代码,然后是我的问题:
// Sample class declaration (in main)
vector<PropLevelFinancials> PLF;
// Sample function call (functions in other header files)
ProcessPropFinancials(vector<PropLevelFinancials>& PLF);
// Reporting at the end of main (functions in other header files)
OutputSummaryReport(vector<PropLevelFinancials>& PLF, other objects);
// What I need to do next
// Clear/Delete PLF and other objects, iterate through model again
我对当前程序的速度和结果非常满意,所以在这方面不需要很多输入(尽管总是欢迎建议(。
我应该如何实现循环浏览多个数据集的能力(我显然知道如何进行循环,我的问题是关于内存管理的(? 速度至关重要。 我想基本上删除我创建的类对象(PLF(的现有实例,然后在对象的新实例上再次运行所有内容。 这是我应该使用"新建"和"删除"来管理迭代的情况吗? 这会改变我上面概述的函数调用吗? 如果我想避免使用 new 和 delete(留在堆栈上(,我有什么选择?
No.永远不要在没有非常特殊的原因的情况下使用new
和delete
。
std::vector<T>
提供了您可以使用的clear()
成员。如果需要的话,我建议您为自己的类实现类似的课程。或者你可以简单地做PLF = std::vector<T>();
,假设你根据最基本的C++准则编写它们,这对你自己的UDT来说效果会更好一些,而无需修改。
相关文章:
- Win32编译器选项和内存分配
- 多个文件的内存分配错误"在抛出 'std :: bad_alloc' what (): std :: bad_alloc 的实例后终止调用" [C++]
- 当需要超过16GB的连续内存时,内存分配失败
- 尝试摆脱任何堆内存分配
- 以下代码执行哪种内存分配(动态或静态)?
- 开放 CV 中的动态内存分配,用于视频处理
- 为什么类和 main() 函数中也有动态内存分配
- 使用 NTAllocateVirtualMemory 和 GetProcAddress 的内存分配问题不起作用
- C++:矢量分配器行为、内存分配和智能指针
- 介于 [固定数组] 和 [带内存分配的指针] 之间的性能
- Linux C++ 中的页面对齐内存分配
- 整数内存分配/释放
- 将内存分配返回值强制转换为 TYPE 数组
- C++程序什么都不做,但瓦尔格林德显示内存分配
- 给定特定内存地址的数组的动态内存分配
- 如何完成内存分配
- 我刚刚了解了C++中的动态内存分配
- 在先前调用 string::find 后添加内存分配和内存集会导致它返回 npos.为什么?
- 对于堆上的页面对齐内存分配是否有任何优化或不同的 API?
- 无法删除布尔动态内存分配