【发布时间】:2015-04-03 17:38:14
【问题描述】:
我的主要问题是,int 和 int8_t 之间的执行时间有什么区别?
在我正在开发的框架中,我经常阅读代码,其中一些参数在函数中设置为 int8_t,因为“该特定参数不能超出 -126,125 范围”。
在很多地方,int8_t用于通信协议,或者将一个数据包切割成多个字段成一个__attribute((packed)) struct。
但在某些时候,它主要放在那里是因为有人认为使用更接近数据大小的类型会更好,可能会先于编译器考虑。
鉴于代码是在 Linux 上运行,使用 glibc 使用 gcc 编译的,并且内存或可移植性不是问题,我想知道它是否真的是一个好主意,就性能而言。
我的第一印象来自“试图比编译器更聪明总是一个坏主意”的规则(除非你知道在哪里以及如何优化)。
但是,我不知道使用int8_t 是否实际上是性能成本(更多的测试和计算来匹配int8_t 的大小,需要更多的操作来确保变量不会超出范围,等等。 ),或者如果它确实以某种方式提高了性能。
我不擅长阅读简单的asm,所以我没有将测试代码编译成asm来尝试知道哪个更好。
我试图找到一个相关的问题,但我在 int<size>_t 与 int 上发现的所有讨论都是关于可移植性而不是性能。
感谢您的意见。非常感谢解释的组装示例或有关此问题的来源。
【问题讨论】:
-
它是操作系统、编译器、优化、ABI 和目标处理器特定的。
-
gcc 在 Debian 上,-std=c99 没有 -O2,32 位 i686 处理器。我希望能澄清一点。
-
如果你正在寻找性能,typedef int_fast#_t,用#替换宽度,指定最快的有符号整数类型,宽度至少为#位。
-
他们说性能是驱动因素吗?对我来说,文档价值很重要。选择 8 位有符号值告诉我该参数将在该范围内。
-
想要号码?测量。
标签: c types micro-optimization