gpt4 book ai didi

c++ - 何时应使用 C++ 固定宽度整数类型以及它们如何影响性能?

转载 作者:可可西里 更新时间:2023-11-01 16:22:04 26 4
gpt4 key购买 nike

通常我想大多数人会使用 int对于所有事情,偶尔他们会使用 unsigned int需要的时候。你可能会时不时地使用 short int ,可能是为了网络流量什么的。

但最近我开始使用std::size_t用于索引到 STL 容器(我应该这样做),然后我开始寻找 std::uint8_t 的用途当创建一个包含四个 8 位颜色值 (RGBA) 的结构时,而不是 char ,仅仅是因为它对我来说更有意义(它是一个数字,不是字符类型,也不是 8 位值,它是 0-255 之间的 8 位数字)。

然后在进行一些网络编程时,我发现我想确保传递的某些值是 16 位的。并根据https://en.cppreference.com/w/cpp/language/types我不能假设 short int是 16 位,只是它至少是 16 位。所以我找到了 std::int16_t 的用途.

这让我逐渐开始在所有地方使用固定宽度的字体。这让我真正思考我需要什么,我需要多少范围等等,它是否会落入负值。

所以现在,int 的出现次数几乎为零在我的代码中。

我认为这是三个原因:

  1. 它让其他人明白我的意图(即,我不希望这个数字大于这个数字或者它不会是负数)
  2. 代码更便携。如果我想要一个 16 位整数类型,它在每个编译器上都是 16 位
  3. 节省内存。尽管我认为在现代 PC 上这基本上不重要。

但我担心这会降低性能,因为您通常的消费级 CPU 会在原生宽度类型(如 std::int32_t)上运行更好。

那么,什么时候应该使用固定宽度类型,它们对性能有何影响?

最佳答案

应该在编写可移植代码时使用int(除非整数大小受到外部因素(例如协议(protocol)解析)的限制,因为这将允许机器使用整数该机器上首选(最佳)的大小。

有许多正在使用的微处理器,例如,其寄存器大小为 16 位;他们提供的编译器 header 将 sizeof(int) 设置为 2。使用例如int32_t 在这些机器上进行算术运算会产生很多额外的指令。

但是:对于索引,使用 int 是个坏主意:size_t 更可取,即使您保证不会使用 int 溢出索引。这是因为该值可能需要转换为索引寄存器大小(例如,size_t 为 64 位,int 为 32 位)。这在内部循环中可能代价高昂。

关于c++ - 何时应使用 C++ 固定宽度整数类型以及它们如何影响性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57141453/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com