表现与正确/偏好?

Joo*_*kia 0 c++ optimization

typedef unsigned char uChar;
typedef signed char sChar;

typedef unsigned short uShort;
typedef signed short sShort;

typedef unsigned int uInt;
typedef signed int sInt;

typedef unsigned long uLong;
typedef signed long sLong;
Run Code Online (Sandbox Code Playgroud)

我有一个typedef列表所以当我定义变量时,我可以准确.例如,如果我只需要数字0-5,我就会使用uChar.但我正在使用C++并正在制作引擎.我正在阅读关于.NET占用X字节的布尔值,并且由于内存对齐,它使用整数更快.

由于内存对齐,性能等原因,是否有理由使用int而不是uChar?

duf*_*ymo 13

这是一种不太重要的过早优化.我会选择一个数据结构并继续使用它.一旦您有一个有问题的完整系统,请对其进行分析以找出问题所在.你猜测和击中头部表现不佳的机会确实很小.


Pot*_*ter 10

  • 那些typedef并不比它们命名的更准确.它们更简洁,但非标准.
  • 如果你想更确切的说,用#include <stdint.h>得到int8_t,uint32_t等等.
  • 如果你需要担心内存对齐,你会发现通过其他方式.
  • 如果您需要存储大量布尔值,请查看std::bitsetstd::vector<bool>.
  • 如果您需要存储一个布尔值,请使用bool!


Pau*_*bel 5

你真的不想把时间浪费在不在关键路径上的东西上.一旦你有了工作,那么你应该剖析并查看问题所在.然后你可以加快麻烦点.

一个快速但不起作用的系统毫无价值.一个有效的慢速系统对某些人来说很有用,并且随着它变得更快而变得更有用.

还要记住,一个未经优化但适当的算法几乎每次都会击败超级优化的差算法.