我应该使用联合来加快执行时间吗?

Should I use unions to accelerate execution time?

我使用的是 8x8 矩阵,其值介于 -6 和 +6 之间。

虽然它可以存储在char矩阵中,但我认为使用int类型应该更快,因为在加载到寄存器时不需要对值进行符号扩展。我还读到它可能会导致缓存问题,但我认为它不应该发生。

问题是,当我多次复制这个矩阵时,我认为创建一个类似于以下的联合可能是值得的:

union my_union{
char c[8];
int64_t i;
};

为了只制作8份而不是64份。为什么不推荐这样做?

编辑:

使用的架构是 x86_64。编译器是激活了 -O3 标志的 GCC 5.4。

关于 union 将 8 个元素 char 类型双关到 int64_t:

Is it not recommended for any reason?

它不会是定义明确的 C 代码。读取与上次写入的成员不同的 union 成员是未定义的行为,只有极少数例外。*此外,即使忽略这一点,而 int64_t 有一些强有力的保证(如 64 位,无填充, ...),char 可能有超过 8 位,使您的副本基于 int64_t 错误/缺少一些位。


如前所述,要获得性能良好的对象副本,首先要尝试的是标准库函数 memcpy()。它有望在大多数情况下表现最佳。


*) 一个值得注意的例外是 union 包含两个 struct 共享一个公共初始序列。鉴于 union 声明可见,在这种情况下允许检查 "other" 成员。