c - 我是否应该使用联合来加快执行时间

  • 本文关键字:执行时间 是否 c unions
  • 更新时间 :
  • 英文 :


我正在使用一个 8x8 矩阵,其值可以在 -6 到 +6 之间。

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

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

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

为了只制作 8 份而不是 64 份。出于任何原因不推荐吗?

编辑:

使用的体系结构是x86_64。编译器是 GCC 5.4,激活了 -O3 标志。

关于一个union类型双关语 8 个元素char int64_t

出于任何原因不推荐吗?

它不会是定义良好的 C 代码。读取与上次写入的成员不同的union成员是未定义的行为,但极少数例外。 此外,即使忽略这一点,虽然int64_t有一些强有力的保证(如 64 位,没有填充,...(,char也可能超过 8 位,根据int64_t错误/丢失一些位留下您的副本。


如前所述,要尝试性能良好的对象副本的第一件事是标准库函数memcpy() 。预计在大多数情况下,它的性能最好。


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

最新更新