gpt4 book ai didi

c - 我应该使用 union 来加速执行时间吗?

转载 作者:行者123 更新时间:2023-11-30 20:59:29 25 4
gpt4 key购买 nike

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

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

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

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

为了只制作 8 份而不是 64 份。出于任何原因不建议这样做吗?

编辑:

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

最佳答案

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

Is it not recommended for any reason?

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

<小时/>

正如已经评论过的,要获得性能良好的对象副本,首先要尝试的是标准库函数 memcpy()。预计它在大多数情况下都会表现最佳。

<小时/>

*) 一个值得注意的异常(exception)是包含两个共享公共(public)初始序列的structunion。鉴于union声明是可见的,在这种情况下允许检查“其他”成员。

关于c - 我应该使用 union 来加速执行时间吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47388801/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com