【问题标题】:QVector<float> or float* - Qt memory management better than native C++?QVector<float> 或 float* - Qt 内存管理比原生 C++ 更好?
【发布时间】:2014-05-30 21:39:47
【问题描述】:

在初始化大量数据结构时,对于内存关键应用程序的内存管理点很少,我是否应该选择 float* 而不是 QVector

特别是,我需要在一个循环中写入结构,并进行多次迭代。 QVectoroperator[] 访问器执行写时复制。使用float* 并访问其元素是否更值得争论?

【问题讨论】:

  • 对其进行基准测试。优化编译器无论如何都会使大多数事情变得无关紧要,因此最好选择最清晰的选项,除非它明显较慢。当然,如果您有大量向量列表,则最好使用矩阵(无论是在性能方面还是在概念上)。
  • 无论如何,向量只是一个指向数组的指针。当您超出容量时,最大的区别将是调整阵列的大小。自己使用float*,您可以明确限制和定义数组的大小。如果事先知道向量的最大尺寸,可以手动改变它的容量,享受向量类的界面,没有调整大小时间的缺点。
  • 使用 QVector 有开销吗?我不需要调整大小功能。我正在使用 QVector 并且应用程序太消耗内存。瓶颈是数据结构的分配
  • 我们需要更多的上下文来回答这个问题。

标签: c++ qt memory optimization memory-management


【解决方案1】:

我宁愿使用QVectorstd::vector。由于QVector 将浮点数存储在一个连续的内存区域中,它的执行速度几乎与float 数组一样快。 Copy-on-write 添加检查,但我认为这无关紧要,但万一这很重要 std::vector 不做 COW。

使用QVector,对其进行基准测试。如果太慢,只能尝试优化。

【讨论】:

    【解决方案2】:

    使用 Windows PSAPI API 分析内存分配,可能会发现 QVector 和 float* 之间的内存消耗差异可以忽略不计。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-29
      • 2012-11-27
      • 2011-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多