矢量内存管理
Vector memory management
从内存管理站点看,对函数中使用的所有临时向量使用一个向量类成员有什么区别:
class A
{
private:
vector<Type> m_vector;
}
void fnc()
{
m_vector.clear();
m_vector.push_back();
//further operations on vector
}
并在函数内部创建温度向量:
void fnc()
{
vector<Type> vector;
//further operations on vector
}
我想第一个选项会导致更少的内存碎片,因为我们正在执行一个分配并使用这个区域,而在第二个情况下,我们为不同函数中的向量分配内存,这会导致内存碎片。
这种矢量用法的优缺点是什么?当我的函数中需要许多向量的类时,我应该使用哪一个?从记忆管理网站来看,哪一个更好看?
从内存管理的角度来看,您的解决方案可能更好,因为碎片和较少的分配/解除分配,但是:
- 在多线程环境中,线程安全性降低 - 您可能需要围绕向量的使用在每个方法中实现一些同步
- 您需要记住清除每种方法中的载体内容
简单规则:
如果您希望向量存在到类对象的生存期,请使其成为类成员,否则不要。
与对象的生存期相关联,则应将其用作成员。
如果没有,您只需要本地向量。
无论第一种方法还是第二种方法更适合您的用法,微优化都会避免它们,除非您的用法预计会重到足以担心避免它。
不要仅仅为了重用而制作成员向量。某物是否是成员应该基于类的逻辑。
相关文章:
- 当vector是tje全局变量时,c++中vector的内存管理
- 当分配一个字符串值并稍后通过分配另一个值进行更改时C++如何管理内存?
- 我有一个线程 1:EXC_BAD_ACCESS(代码 = 1,地址 = 0x8)错误.我认为这是由于内存管理不好.我可以
- 可以通过非原始指针来增强容器矢量管理内存
- 如何使用 std::vector<std::tuple<A,B>> 来管理内存(调整大小、保留,...),但实际上将 As 保留在 B 之前,连续
- 线程管理内存泄漏
- 通过读取文件创建映射<字符串,矢量>时如何管理内存<string>
- 管理内存C++
- ptr_vector如何管理内存
- 在C++Builder/Firemonkey中使用表单创建来管理内存
- 如何正确管理内存(运行时)C++
- 在Node.js中使用Native Abstractions时,如何管理内存
- ostream是如何管理内存的
- C++中管理内存泄漏的问题
- OpenCL:在 CPU 上而不是在 GPU 上更正结果:如何正确管理内存
- deque是如何管理内存的
- 用c++/cli互操作管理内存
- 如何衡量管理内存所花费的时间
- (加速C++)章节管理内存
- 如何在此场景中管理内存