C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了c – 在编译时解析(u)int_fastX_t大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
C标准类型的实现将(u)int_fastX类型定义为其内置类型之一.这需要研究哪种类型最快,但每种情况都不可能有一种最快的类型.

在编译时通过选择实际使用的最佳类型来解决此类问题,是否会提高性能?编译器将分析_fast变量的使用,然后选择最佳类型.发挥作用的因素可能是对齐以及与变量一起使用的操作类型.

这将有效地使这些类型成为语言特征.

当编译器突然决定为这样的变量选择另@L_673_2@宽度时,这可能会引入错误.但是在这种用例中不应该使用_fast类型,其行为取决于宽度.

标准是否允许这样的编译时间解析?
如果是的话,为什么不在今天实施呢?
如果不是,为什么它不符合标准?

解决方法

不,标准不允许这样做.请记住,对于此特定区域,C标准遵循C,例如,C 11遵循C99,按照C 11 1.1 / 2.具体而言,C 11 18.4.1 Header< cstdint>概要/ 2状态:

所以,让我们先解决你的第@L_673_2@争论,你说:

C标准可以这么说,在c99 7.18.1.3最快的最小宽度整数类型(我的斜体):

因此,对于所有可能的用途,类型不是最快的,这确实是正确的,但这似乎不是作者在定义这些方面时所虑的.

引入固定宽度类型(在我看来)是为了解决所有开发人员在各种实现中具有不同int宽度的问题.

类似地,一旦开发人员知道他们想要的值范围,快速最小宽度类型就可以让他们以最大可能的速度对这些值进行算术运算.

在最后一段中涵盖您的三个具体问题(下面以粗体@L_674_10@):

(1)标准是否允许这样的编译时间决议?

我不相信. C标准的相关部分有这一小段文字

这似乎表明它必须是实现提供的typedef,并且由于没有“变量”typedef,因此必须修复它.

可能存在摆动空间,因为根据某些环境虑因素可能提供不同的typedef,但实际实现这一点的难度似乎非常高(请参阅下面我对第三个问题的回答).

其中最主要的是这些适应性类型,如果它们具有外部联系,则需要在链接在一起时在所有编译的翻译单元之间达成一致.@L_673_2@单元具有16位类型而另@L_673_2@单元具有32位类型将导致各种问题.

(2)如果是,为什么不在今天实施?

我正在推动“不”作为对你的第@L_673_2@问题的回答所以我不打算推​​测这个,除了通过引用你对下面第三个问题的答案(它可能没有实施,因为它非常难,有可疑的好处).

(3)如果不是,为什么不在标准中?

标准是实现者和用户间的契约,描述了实现者将提供的内容.通常情况下,标准委员会往往比前者(他们并不热衷于为自己做太多的额外工作)比后者更多地填充.

例如,我希望在C中拥有所有你自己的C数据结构,但这会导致标准版本相隔几十年而不是几年:-)

@H_616_59@

大佬总结

以上是大佬教程为你收集整理的c – 在编译时解析(u)int_fastX_t全部内容,希望文章能够帮你解决c – 在编译时解析(u)int_fastX_t所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。