如何将extern const int的优化改写为长尾关键词?

2026-04-16 17:195阅读0评论SEO资源
  • 内容介绍
  • 相关推荐

本文共计503个文字,预计阅读时间需要3分钟。

如何将extern const int的优化改写为长尾关键词?

在项目中工作,以下代码示例:

cfile1.c:extern const int z;int x;do_some_stuff_to_calculate_x();y=x / z;do_some_stuff_with_y();

file2.c:const int z=Z_INIT_VALUE; // some value defined in some .h file

我在项目中工作,我有以下代码:

在file1.c

extern const int z; int x; do_some_stuff_to_calculate_x(); y = x / z; do_some_stuff_with_y();

file2.c中

const int z = Z_INIT_VALUE; // some value defined in some .h file.

兴趣点是file1.c中的除法.由于z是extern,因此在编译时不知道[它将在链接时间中定义].
因此,编译器无法优化除法.

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

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

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

谢谢 :)

更新:

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

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

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

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; }

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

如何将extern const int的优化改写为长尾关键词?

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

本文共计503个文字,预计阅读时间需要3分钟。

如何将extern const int的优化改写为长尾关键词?

在项目中工作,以下代码示例:

cfile1.c:extern const int z;int x;do_some_stuff_to_calculate_x();y=x / z;do_some_stuff_with_y();

file2.c:const int z=Z_INIT_VALUE; // some value defined in some .h file

我在项目中工作,我有以下代码:

在file1.c

extern const int z; int x; do_some_stuff_to_calculate_x(); y = x / z; do_some_stuff_with_y();

file2.c中

const int z = Z_INIT_VALUE; // some value defined in some .h file.

兴趣点是file1.c中的除法.由于z是extern,因此在编译时不知道[它将在链接时间中定义].
因此,编译器无法优化除法.

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

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

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

谢谢 :)

更新:

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

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

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

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; }

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

如何将extern const int的优化改写为长尾关键词?

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