gpt4 book ai didi

c++ - 不断结合优化编译器

转载 作者:可可西里 更新时间:2023-11-01 17:39:44 27 4
gpt4 key购买 nike

我有一个包含很多小内联函数的头文件。他们中的大多数恰好有常量数据。由于这些函数对性能至关重要,因此它们处理常量的方式变得很重要。据我所知,有两种方法可以引用常量:

1) 在稍后与应用程序链接的单独源文件中定义它们。

2) 就地定义常量。

我会选择后一种方式,因为它更易于维护。但是,如果编译器不优化通过内联创建的数千个相等常量,它可能会变慢。

问题:

编译器会合并这些相等的常量吗?具体而言,将使用以下哪些方法?

1) 跨编译单元组合相等常量。
2) 跨链接模块(整个程序或库)组合相等常量
3) 将常量与碰巧具有相同位模式并满足编译单元或整个程序对齐要求的任何静态常量数据组合。

我使用现代编译器 (GCC4.5)。

我不是汇编专家,因此我无法通过几个简单的测试自己回答这个问题:)

编辑:

常量非常大(大多数至少有 16 个字节),因此编译器无法使它们成为立即值。

编辑 2:

代码示例

这个就地使用常量:

float_4 sign(float_4 a)
{
const __attribute__((aligned(16))) float mask[4] = { //I use a macro for this line
0x80000000, 0x80000000, 0x80000000, 0x80000000};
const int128 mask = load(mask);
return b_and(a, mask);
}

最佳答案

根据GCC以下选项可以满足您的需求:

-fmerge-constants

Attempt to merge identical constants (string constants and floating point constants) across compilation units. This option is the default for optimized compilation if the assembler and linker support it. Use -fno-merge-constants to inhibit this behavior.
Enabled at levels -O, -O2, -O3, -Os.

关于c++ - 不断结合优化编译器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5010216/

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