通常,我想大多数人会使用int所有内容,并且有时会unsigned int在需要时使用它们。short int有时您可能会使用,可能用于网络流量等。
但是最近我已经开始std::size_t用于索引STL容器(应该如此),然后我开始std::uint8_t在创建四个8位色值(RGBA)而不是a的结构时找到用处char,因为它可以对我来说更有意义(这是一个数字,不是字符类型,也不是8位值,它是0-255之间的8位数字)。
然后在进行一些网络编程时,我发现我想确保传递的某些值是16位。根据https://en.cppreference.com/w/cpp/language/types,我不能假设a short int是16位,而只能是至少 16位。所以我找到了一个用途std::int16_t。
这使我逐渐开始在所有地方使用固定宽度类型。这使我真正考虑了我需要什么,需要多少范围等,不管它是否会变成负值。
所以现在,int我的代码中几乎没有零发生。
我认为这有三个原因:
但是我担心这会降低性能,因为您通常的消费级CPU会以std::int32_t更好的本机宽度类型运行。
那么,什么时候应该使用固定宽度类型,它们如何影响性能?
您应该在编写可移植代码时使用int(除非整数大小受到外部因素(例如协议解析)的限制,因为这将允许机器使用该机器上首选(最佳)的整数大小。
例如,有许多寄存器大小为 16 位的微处理器;他们提供的编译器头设置sizeof(int)为2。在这些机器上使用egint32_t进行算术会生成很多额外的指令。
然而:对于索引来说,使用int是一个坏主意:size_t更好,即使使用 int 保证不会溢出索引。这是因为该值可能需要转换为索引寄存器大小(例如 64 位size_tvs 32 位int)。这在内循环中可能代价高昂。
| 归档时间: |
|
| 查看次数: |
179 次 |
| 最近记录: |