首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++性能/内存优化指南

C++性能/内存优化指南
EN

Stack Overflow用户
提问于 2010-04-01 02:19:26
回答 8查看 12.8K关注 0票数 5

谁有C++内存优化指南的资源?最佳实践、调优等?

举个例子:

代码语言:javascript
复制
Class xxx {

    public: 
        xxx();
        virtual ~xxx();

    protected:

    private:

};

由于在这个类中没有受保护和私有的项,那么在编译器或内存分配上去掉protected和private会有什么好处吗?

更新:什么是程序员做这件事:

代码语言:javascript
复制
Class xxx {

    public: 
        xxx();
        virtual ~xxx();

    public:
        more stuff();
        more();

   ifndef __BUILD_WIN__
      public:
        even more();
        envenmore2();
   endif
    protected:

    private:

};
EN

回答 8

Stack Overflow用户

发布于 2010-04-01 02:22:04

谁有C++内存优化指南的资源?最佳实践、调优等?

这在很大程度上取决于您的编译器和目标环境(RISC、Unix/Linux、Windows)。大多数编译器都会有这样的信息。

有一些实用程序可以让您跟踪内存泄漏,以便您可以在测试期间修复它们。如果你打算动态分配很多东西(这通常是C/C++的情况),在销毁一个对象之前,试着确保你释放了所有的东西。为此,请执行以下操作:

  • 如果你更看重内存而不是处理器,使用smart pointers.
  • If你的类有任何成员变量都是指针,确保你的析构函数释放了每一个。在源代码中将成员变量组合在一起,以便随时将这些变量与destructor.
  • Avoid动态内存分配进行比较,以避免泄漏。优先使用std::string而不是动态分配的char*,等等。

由于在这个类中没有受保护和私有的项,那么在编译器或内存分配上去掉protected和private会有什么好处吗?

不,如果我没记错的话,protected/private只在编译期间被检查,所以即使关键字下有项,它们也不会影响性能。

此外,重要的是要理解编译器是非常智能的(通常比程序员更聪明),所以它会优化掉它能做的任何事情;例如,让我们在构造函数中声明一个变量int a。假设你根本不使用它,你只是把它忘在那里了。大多数编译器甚至不会为这些变量节省堆栈空间。其他人则需要用户激活优化才能实现,但作为经验法则,任何程序的生产版本都应该在编译时启用优化,即使不是完全启用。

关于,你看到的东西是预处理器指令,被用来做所谓的选择性编译。看看here吧。

票数 13
EN

Stack Overflow用户

发布于 2010-04-01 02:23:21

编译器不需要解析它们,所以这对编译器是有好处的。这是有价值的(不是很有价值)。

应该没有内存使用差异。

除此之外,我能想到的唯一好处是,对于阅读代码的人来说,必须处理的繁琐工作减少了(并不是说它在您的示例中特别繁琐)。

票数 2
EN

Stack Overflow用户

发布于 2010-04-01 03:18:19

有Dov Bulka和David Mayhew的"Efficient C++: Performance Programming Techniques“。我不认为它是开创性的,但它确实是一本有趣的读物,它教会了一些基础知识。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2555402

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档