【发布时间】:2015-09-22 06:30:37
【问题描述】:
(我指的是 Intel CPU,主要是 GCC,但也有 ICC 或 MSVC)
使用int8_t、int16_t 或int64_t 是否确实比int32_t 效率更低,因为生成了额外的指令来在CPU 字长和所选变量大小之间进行转换?
如果有人对此有任何示例或最佳实践,我会感兴趣吗?我有时使用较小的变量大小来减少缓存线负载,但假设我只消耗了 50 个字节的缓存线,其中一个变量是 8 位 int,通过使用剩余的缓存线空间并将 8 位 int 提升为32位整数等?
【问题讨论】:
-
对其进行分析,然后发布您的发现。
-
在较旧的处理器上,它确实有助于使用本机字长,但在现代处理器上,数据是为了缓存目的而批量获取的。
-
@KerrekSB 抖动会隐藏任何差异。但是,我仍然想知道是否有任何场景会生成更多指令。
-
你熟悉 cstdint 中的全套类型吗?例如int_fast8_t 等? (en.cppreference.com/w/cpp/types/integer)
-
uint64_t:在 32 位 CPU 上,使用 64 位数据类型在任何情况下都会比 32 位数据类型慢,因为程序需要两倍的机器指令数..
标签: c++ performance assembly optimization cpu-architecture