2012-01-04 53 views
1

基本上我很想知道你走多远,以确保用户获得最佳应用程序。提高应用程序性能的微不足道的方法

  1. 哪一个更喜欢动态/静态内存分配,当两者都有可能时。
  2. 刮012 int和使用shortint8_t。它真的有帮助吗?或者这会更令人头疼?
  3. 动态分配“按比例”大量内存(由于缺乏所需实际内存信息)。然后将其重新分配给较小的内存(压缩)并删除前者。例如。我分配1000个单位的内存。然后经过计算,我确定只需要400个单位。所以我分配新的400个单位,复制400个项目,然后删除1000个单位。在这个过程中,我最终分配了更多的内存,即1400个单元。那么我真的应该努力分配新的400个单位,让600个单位浪费? [主要问题]
  4. 有效使用union有助于降低内存使用量吗?

我相信还有更重要的一点缺失。欢迎任何其他已知或土着方式来增加记忆力和时间表现。

+1

如果它们不重要,那么它们并不重要,对吧? – 2012-01-04 05:14:51

+1

7:不;请阅读一本好书,并开始写一些有用的东西,并获得代码审查,而不是过早地担心你在酒吧里听到的东西。 – 2012-01-04 05:14:58

+0

我不能说这是一个列表问题,还是7个问题之一。无论哪种方式,在这里看起来都不太合适。 – Flimzy 2012-01-04 05:15:27

回答

1

2. Static. Don't allocate memory when you don't need to.

3. If the system is a 32-bit system, then the actual instructions to the processor will actually prefer uint32_t or int32_t...

5. If I need a generic data type that would need to be allocated several times in a loop, then a union can come in handy... to avoid allocating memory.

6. From my experience, allocating memory can be a slow process if it is done in a loop... You will see a performance increase if you allocate all the memory ahead of time, and then use it from a pool. When the system has go find huge blocks of memory, it can be a bottleneck.

7. In real-time situations with large chunks of memory... yes... otherwise... eh... not really

希望这有助于...如果按照这个风格,你会发现改进的性能。

9

7。我的担忧是否真实?

不是。您提到的所有内容通常都是无用的微观优化,尤其是对于现代编译器。写代码是最可读的,因为代码被读取的次数比写入次数多。

+2

+1。祝福智慧的话语。 – 2012-01-04 05:24:33

+0

最好的回答我从来没有读过,因为我成为了stackoverflow的成员... :) – Owen 2012-01-04 05:33:01

+0

谢谢你确认我的恐惧! – 2012-01-04 06:04:29

1

这可能会更适合Programmers.StackExchange.com。无论如何,我通常遵循unix的哲学,不要固定瓶颈,直到你看到一个。

至于你的主要问题。这将会使用更多的处理周期,而不仅仅是分配大块的内存并完成它,所以从这个意义上讲效率较低。无论如何,内存现在相当耗费,效率,可重用性和可读性通常是我最关心的问题。

如果您有此担忧,请将-O3传递给您的编译器。