c – 在编译时解析(u)int_fastX_t
C标准类型的实现将(u)int_fastX类型定义为其内置类型之一.这需要研究哪种类型最快,但每种情况都不可能有一种最快的类型.
在编译时通过选择实际使用的最佳类型来解决此类问题,是否会提高性能?编译器将分析_fast变量的使用,然后选择最佳类型.发挥作用的因素可能是对齐以及与变量一起使用的操作类型. 这将有效地使这些类型成为语言特征. 当编译器突然决定为这样的变量选择另一个宽度时,这可能会引入错误.但是在这种用例中不应该使用_fast类型,其行为取决于宽度. 标准是否允许这样的编译时间解析? 解决方法
不,标准不允许这样做.请记住,对于此特定区域,C标准遵循C,例如,C 11遵循C99,按照C 11 1.1 / 2.具体而言,C 11 18.4.1 Header< cstdint>概要/ 2状态:
所以,让我们先解决你的第一个争论,你说:
C标准可以这么说,在c99 7.18.1.3最快的最小宽度整数类型(我的斜体):
因此,对于所有可能的用途,类型不是最快的,这确实是正确的,但这似乎不是作者在定义这些方面时所考虑的. 引入固定宽度类型(在我看来)是为了解决所有开发人员在各种实现中具有不同int宽度的问题. 类似地,一旦开发人员知道他们想要的值范围,快速最小宽度类型就可以让他们以最大可能的速度对这些值进行算术运算. 在最后一段中涵盖您的三个具体问题(下面以粗体显示): (1)标准是否允许这样的编译时间决议? 我不相信. C标准的相关部分有这一小段文字:
这似乎表明它必须是实现提供的typedef,并且由于没有“变量”typedef,因此必须修复它. 可能存在摆动空间,因为根据某些环境考虑因素可能提供不同的typedef,但实际实现这一点的难度似乎非常高(请参阅下面我对第三个问题的回答). 其中最主要的是这些适应性类型,如果它们具有外部联系,则需要在链接在一起时在所有编译的翻译单元之间达成一致.一个单元具有16位类型而另一个单元具有32位类型将导致各种问题. (2)如果是,为什么不在今天实施? 我正在推动“不”作为对你的第一个问题的回答所以我不打算推??测这个,除了通过引用你对下面第三个问题的答案(它可能没有实施,因为它非常难,有可疑的好处). (3)如果不是,为什么不在标准中? 标准是实现者和用户之间的契约,描述了实现者将提供的内容.通常情况下,标准委员会往往比前者(他们并不热衷于为自己做太多的额外工作)比后者更多地填充. 例如,我希望在C中拥有所有你自己的C数据结构,但这会导致标准版本相隔几十年而不是几年:-) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- c# – 将UserId分配给外键= null
- swift – 带有nil searchResultsController的UISearchContr
- swift – 如何测试staticTexts包含使用XCTest的字符串
- c – 我们什么时候需要提及/指定数字文字的整数类型?
- jQuery DataTables插件自定义Ajax分页实例解析
- ruby-on-rails – 在heroku回滚后部署
- 如何在SQLite中使用带有Monotouch for iOS的FTS
- 深入认识Redux(三)
- c# – 返回类型不正确,但我不明白应该是什么
- ruby – 在Padrino上模拟current_account用于rspec测试