C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了对“extern const int”进行划分的优化大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我在项目中工作,我有以下代码: @H_801_5@ @H_801_5@在file1.c

@H_801_5@
extern const int z;
int x;
do_some_stuff_to_calculate_x();
y = x / z;
do_some_stuff_with_y();
@H_801_5@file2.c中

@H_801_5@
const int z = Z_INIT_VALUE; // some value defined in some .h file.
@H_801_5@兴趣点是file1.c中的除法.由于z是extern,因此在编译时不知道[它将链接时间中定义].
因此,编译器无法优化除法.

@H_801_5@我知道如果在编译时知道z的值,编译器会将除法转换为乘法和其他一些操作.

@H_801_5@请注意,file1.c将作为库提供,因此不能选择使用file2.c重新编译file1.c.

@H_801_5@有人知道让链接器优化这样的东西吗?
或者任何其他技巧来避免这种昂贵的分裂?

@H_801_5@谢谢 :)

@H_801_5@更新:

@H_801_5@好吧,在我看到一些答案后,我注意到需要更多细节才能使这个问题更具信息性.

@H_801_5@>我使用名为@L_616_4@(家庭SH725)的公司的微控制器.
>这个部门可以在代码中的许多地方找到,有很多变种.
>代码中的大多数其他内容是直接读写寄存器和端口(无开销,即:* 0x0ABCDEFF = 15).

@H_801_5@包括除法的功能通常如下所示.

@H_801_5@
extern const int common_divisor;
extern const int common_addition;

void handleTheDamnInterrupt(void)
{
    int x = *(REG_foo_1);
    int y = x / common_divisor;
    y += common_addition;
    if( x > some_value )
    {
       y += blah_blah;
    }
    else
    {
       y += foo_bar;
    }

    *(REG_BAR_1) = y;
}
@H_801_5@该功能是所有程序中的典型功能形式.无法准确知道分区对程序的影响有多大,因为我有许多具有不同周期性的函数.
但是当我试图从const中删除extern并赋予它任意值时,它会更好.

解决方法

您可以自己进行相同的优化,在初始化时执行一些设置计算. Terje Mathisen发明的将整数除法转换为乘法的算法在此描述: http://www.asdf.org/~fatphil/x86/pentopt/27.html

大佬总结

以上是大佬教程为你收集整理的对“extern const int”进行划分的优化全部内容,希望文章能够帮你解决对“extern const int”进行划分的优化所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。