- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有一个包含很多小内联函数的头文件。他们中的大多数恰好有常量数据。由于这些函数对性能至关重要,因此它们处理常量的方式变得很重要。据我所知,有两种方法可以引用常量:
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/
如果这不是一个错误,那就是另一个错误。如果不是那样的话,那就是别的东西了。我觉得我的项目已经改变了很多,现在只是试图解决代码签名问题,结果一切都搞砸了。我严格按照说明进行操作,但出现错误,例如当前的“
我不确定是否有一些我不知道的内置变量或规则,或者 make 是否有问题,或者我只是疯了。 对于我的一个项目,我有一个如下的 makefile: CC=g++ CFLAGS=-O3 `libpng-co
我有大约 10 个 div,它们必须不断翻转,每个 div 延迟 3 秒 这个 codrops 链接的最后一个效果是我正在寻找的,但无需单击 div http://tympanus.net/Devel
我如何使用 jQuery 持续运行 PHP 脚本并每秒获取响应,以及将鼠标上的少量数据发送到同一脚本? 我真的必须添加一些随机扩展才能让这么简单的计时器工作吗? 最佳答案 To iterate is
JBoss 4.x EJB 3.0 我见过如下代码(大大简化): @Stateless @TransactionAttribute(TransactionAttributeType.NOT_SUPPO
使用 PHPStorm,我试图忽略每次尝试进行 git 提交时 pop 的 workspace.xml。 我的 .gitignore 看起来像: /.idea/ .idea/workspace.xml
我是一名优秀的程序员,十分优秀!