English 中文(简体)
gcc -fPIC seems to muck with optimization flags
原标题:

Following along from this question: how-do-i-check-if-gcc-is-performing-tail-recursion-optimization, I noticed that using gcc with -fPIC seems to destroy this optimization. I am creating a shared library, but I doesn t seem to need the -fPIC option.

Well, my question is, why does -fPIC change gcc optimizations ? Do I need to keep -fPIC for any reason ?

问题回答

In absence of details such as target architecture and compiler version, a possible explanation is this:

In position-dependent code, the tail-recursion optimization is essentially to reuse the current stack frame, and to replace the considered call by a jump. The syntax may be call function replaced by jmp <small offset of function>.

In position-independent code, the call may be written call function@PLT if the instruction set allows it (this example is amd64). It could perfectly well be replaced by jmp <small offset of function>@PLT, but the two settings do interfere and perhaps gcc developers did not get around to implementing tail-call optimization in the latter mode.

In ia32 linux, use of fpic means that you don t have ebx available for general purpose use, which will surely impact optimization. Perhaps the compiler decided against the tail recursion optimization due to register scheduling pressure.





相关问题
Fastest method for running a binary search on a file in C?

For example, let s say I want to find a particular word or number in a file. The contents are in sorted order (obviously). Since I want to run a binary search on the file, it seems like a real waste ...

Print possible strings created from a Number

Given a 10 digit Telephone Number, we have to print all possible strings created from that. The mapping of the numbers is the one as exactly on a phone s keypad. i.e. for 1,0-> No Letter for 2->...

Tips for debugging a made-for-linux application on windows?

I m trying to find the source of a bug I have found in an open-source application. I have managed to get a build up and running on my Windows machine, but I m having trouble finding the spot in the ...

Trying to split by two delimiters and it doesn t work - C

I wrote below code to readin line by line from stdin ex. city=Boston;city=New York;city=Chicago and then split each line by ; delimiter and print each record. Then in yet another loop I try to ...

Good, free, easy-to-use C graphics libraries? [closed]

I was wondering if there were any good free graphics libraries for C that are easy to use? It s for plotting 2d and 3d graphs and then saving to a file. It s on a Linux system and there s no gnuplot ...

Encoding, decoding an integer to a char array

Please note that this is not homework and i did search before starting this new thread. I got Store an int in a char array? I was looking for an answer but didn t get any satisfactory answer in the ...

热门标签