C+中的指针+;:需要使用指针的对象应该有多大? 我经常在文献中解释C++指针的一个用例是当一个大对象需要处理时,但是对象在操作时需要一个指针有多大?这方面有什么指导原则吗?

C+中的指针+;:需要使用指针的对象应该有多大? 我经常在文献中解释C++指针的一个用例是当一个大对象需要处理时,但是对象在操作时需要一个指针有多大?这方面有什么指导原则吗?,c++,pointers,C++,Pointers,当你想在不同的地方引用同一个对象时,应该使用指针。事实上,您甚至可以对相同的对象使用引用,但指针给了您一个额外的优势,即在引用不断引用相同对象的同时,可以引用不同的对象 再想一想,您可能是在引用freestore上使用new等创建的对象,然后通过指针引用它们。这方面没有明确的规定,但一般来说,您可以在以下情况下这样做: 正在创建的对象太大,无法容纳在堆栈或 您希望将对象的生存期延长到超出范围等 我不认为尺寸是要考虑的主要因素。 指针(或引用)是从不同位置指定一组数据(对象、函数或非类型化字节集

当你想在不同的地方引用同一个对象时,应该使用指针。事实上,您甚至可以对相同的对象使用引用,但指针给了您一个额外的优势,即在引用不断引用相同对象的同时,可以引用不同的对象

再想一想,您可能是在引用freestore上使用
new
等创建的对象,然后通过指针引用它们。这方面没有明确的规定,但一般来说,您可以在以下情况下这样做:

  • 正在创建的对象太大,无法容纳在堆栈或
  • 您希望将对象的生存期延长到超出范围等

  • 我不认为尺寸是要考虑的主要因素。

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

    如果您复制而不是使用指针,则可能会有相同数据的两个不同版本彼此不一致的风险。如果这两个副本代表一条信息,那么您必须做两次工作以确保它们保持一致

    因此,在某些情况下,使用指针指向引用(即使是单个字节)可能是正确的做法,尽管存储所述字节的副本在内存使用方面会更有效

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

    我经常通过探查器运行程序,发现CPU功率的惊人百分比进入了各种形式的内存到内存拷贝中。 我还注意到,优化内存效率的成本常常被代码复杂性所抵消,但获得的收益却少得出奇

    另一方面,我花了很多时间跟踪bug,直到数据不一致,其中一些bug需要大规模的代码重构才能消除

    <> P>正如我所见,当一个项目结束时,内存效率应该成为一个关注点,当分析揭示出CPU /内存消耗真正发生的地方时,代码稳健性(尤其是数据流和数据一致性)应该是概念和编码早期阶段考虑的主要因素。 如果应用程序需要处理大量的数据,那么在开始时只应对最庞大的数据类型进行尺寸标注。在现代PC中,我们谈论的是数百兆字节,这是大多数应用程序永远不需要的


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

    没有这样的限制或指导原则。你必须做出决定

    假设下面的类定义。大小为100整数=400字节

    class test
    {
    private:
        int m_nVar[100];
    };
    
    当您使用以下函数定义(按值传递)时,将调用复制构造函数(即使您没有提供一个)。因此,将发生100个整数的复制,这显然需要一些时间才能完成

    void passing_to_function(test a);
    
    当您将函数的定义更改为引用或指针时,不会发生这种复制。仅传输测试*(仅指针大小)


    因此,通过ref或ptr传递显然比通过value传递有优势谢谢,但是如何确定大小过大或不高?@阿玛尼:取决于堆栈大小的具体设置。没有一个规则适合所有人和所有人。简单地说,仅考虑您所考虑的大小,因为指针大小通常为4字节,任何大于此大小的对象都可以处理指针。该文章可能有误导性或措词不当。没有这样的指导方针。将数据传递到例程时,为了方便起见,请使用指针/引用。通过堆栈传递大量数据不是一个好主意。@cup如何确定可以(或应该)通过堆栈传递的数据量?我认为这基本上是这里的问题,这个想法没有误导性,这取决于架构。在某些体系结构上,传递太多会导致堆栈崩溃。通常,我会尽可能少地说:这是一种手动优化,可以减少流向被调用方的数据量并使程序运行更快。为什么人们(和标准库)在传递
    std::string
    时通常使用常量引用(而不是常量副本)?这与这些对象的潜在大小无关吗?进行复制不仅会导致内存效率低下(因为大多数字符串长度超过4或8字节)和耗时,而且还会创建几十个相同信息的副本。如果用户想要创建同一字符串的两个不同版本,则必须明确订购副本。否则,就会使用引用。那么,你是说,只要数据的大小大于指针的大小,就值得使用指针(或引用)?@jogojapan:这和你在通过摆弄位来评论答案时使用的想法是一样的吗?从某种意义上说,这听起来很合乎逻辑。@Amani我个人认为答案要复杂得多。复制的次数、缓存和缓存线的大小,以及可能的一系列其他因素都会起作用。我个人倾向于复制对象,即使它们是指针大小的三到四倍,但真正的答案是尝试不同的方法并测量差异(“分析”)。我在这里评论的要点是,我很惊讶kuroi neko第一次声明大小不是ma
    void passing_to_function(test& a);