|
|
|
|
 请问如何设置编译选项开启inline功能 - dswei [ 2005-06-20 23:23 | 347 byte(s)]
 Re: 请问如何设置编译选项开启inline功能 - grip2 [ 2005-07-27 13:29 | 151 byte(s)]
 Re: 请问如何设置编译选项开启inline功能 - pdqqdqq [ 2005-07-23 17:13 | 507 byte(s)]
 Re: 请问如何设置编译选项开启inline功能 - grip2 [ 2005-07-27 13:31 | 48 byte(s)]
|
|
|
|
[Original]
[Print]
[Top]
|
我的编译选项如下:
INCLUDEDIR := $(shell pwd)/include
TOPDIR := $(shell pwd)
CFLAGS := -Wall -Wstrict-prototypes -ffreestanding -c
CPPFLAGS := -I$(INCLUDEDIR)
LDFLAGS :=
但是查看反汇编码发现用inline定义的函数并没有嵌入代码中,还是作为一个函数被调用。
请指教
|
|
|
[Original]
[Print]
[Top]
|
|
[Original]
[Print]
[Top]
|
通常在O3编译优化打开的情况下gcc会自动进行函数内联,低于O3的情况下,则可指定-finline-functions选项。
但是,内联的函数必须满足一定的条件,比如函数不能太大,不能有太复杂的调用关系等等。即使指定了函数是要内联的,这也只能作为编译器的参考,如果不满足它的条件,则不会内联。
另外,有的gcc版本给内联条件设置的阈值太低,比如说,不允许内联指令条数超过50条指令的函数。你可以修改它的有关参数(位于文件params.def中的PARAM_MAX_INLINE_INSNS_SINGLE、PARAM_MAX_INLINE_INSNS_AUTO,...等宏常数),并重建版本。
|
|
|
[Original]
[Print]
[Top]
|
|
[Original]
[Print]
[Top]
|
使用-O2优化开关,inline关键字即可生效。
如果使用O2后依然无法内联,那通常是你对的内联函数使用存在问题(不符合GCC的内联要求),你可以查看gcc手册。
|
|
|
----
The stars are not afraid to appear like fireflies.
|
|
[Original]
[Print]
[Top]
|
|
[Original]
[Print]
[Top]
|
-finline-limit=n
即可设置指令限制阀值。
|
|
|
----
The stars are not afraid to appear like fireflies.
|
|
[Original]
[Print]
[Top]
|
|
|