c++ - C++ 中的指针 : How large should an object be to need use of a pointer?

标签 c++ pointers

我经常在文献中读到解释 C++ 指针的一个用例是当一个人有大对象要处理时,但是一个对象应该有多大才能在被操作时需要一个指针?有没有这方面的指导原则?

最佳答案

我认为大小不是要考虑的主要因素。

指针(或引用)是一种从不同位置指定一组数据(无论是对象、函数还是未类型化字节的集合)的方法。

如果您使用拷贝而不是使用指针,您将面临相同数据的两个不同版本变得彼此不一致的风险。如果两个拷贝代表一条信息,那么您将不得不做两倍的工作以确保它们保持一致。

因此在某些情况下,使用指针来引用甚至单个字节可能是正确的做法,即使存储所述字节的拷贝在内存使用方面会更有效。

编辑:回答 jogojapan 的评论,这是我对内存效率的看法

我经常通过分析器运行程序,发现惊人比例的 CPU 能力用于各种形式的内存到内存拷贝。 我还注意到,优化内存效率的成本通常被代码复杂性所抵消,但 yield 却微乎其微。

另一方面,我花了很多时间将错误追踪到数据不一致,其中一些需要进行大量代码重构才能消除。

在我看来,在项目接近尾声时,内存效率应该成为更多关注的问题,此时分析会揭示 CPU/内存消耗真正发生的位置,而代码稳健性(尤其是数据流和数据一致性)应该是主要问题在概念和编码的早期阶段要考虑的因素。

如果希望应用程序处理大量数据,则应在开始时仅对最庞大的数据类型进行维度标注。在现代 PC 中,我们谈论的是数百兆字节,而大多数应用程序永远都不需要。

当我在 10 或 20 年前设计嵌入式软件时,内存使用一直是一个问题。但是在像台式机这样的环境中,与可用 RAM 的数量相比,内存需求在大多数情况下可以忽略不计,对我来说,专注于可靠的设计似乎更重要。

关于c++ - C++ 中的指针 : How large should an object be to need use of a pointer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20866338/

相关文章:

c++ - 从静态函数调用非静态变量

c++ - 是什么导致 Eclipse CDT Unresolved inclusion : <iostream>

java - 从手机流式传输视频

c++ - 如何使用插入函数和迭代器更改 vector 中的元素?

c - 特定地址处的动态结构数组

C++ 运算符代码继承出现问题 : am I require to copy same code for all derived classes?

c - 使用结构中的指针从文件中读取

c++ - 适用于 Windows 7 的 OpenGL

c++ - std::any 用于仅移动模板,其中 copy-ctor 内的 static_assert 等于编译错误,但为什么呢?

c++ - C++ 中的多态返回类型