मैं रिलीज बिल्ड के लिए -फिनलाइन-फ़ंक्शंस ऑप्टिमाइज़ेशन के साथ जीसीसी का उपयोग कर रहा हूं। कोड ब्लोट का मुकाबला करने के लिए क्योंकि मैं एक एम्बेडेड सिस्टम पर काम करता हूं, मैं कहना चाहता हूं कि विशेष कार्यों को रेखांकित न करें। ऐसा करने का स्पष्ट तरीका फ़ंक्शन विशेषताओं यानी विशेषता (नोलाइन) के माध्यम से होगा। समस्या यह है कि जब मैं ग्लोबल-फ़िनलाइन-फ़ंक्शंस ऑप्टिमाइज़ेशन पर स्विच करता हूं जो -O3 स्विच का हिस्सा होता है तो यह काम नहीं करता है।gcc -finline-functions व्यवहार?
यह भी एक ही कार्य के एक गैर-टेम्पलेट संस्करण के रूप में टेम्पलेट होने के साथ कुछ करने के लिए कुछ भी नहीं है जो अपेक्षित है।
क्या कोई वैश्विक विचार चालू होने पर इनलाइनिंग को नियंत्रित करने का कोई विचार है?
#include <cstdlib>
#include <iostream>
using namespace std;
class Base
{
public:
template<typename _Type_>
static _Type_ fooT(_Type_ x, _Type_ y) __attribute__ ((noinline));
};
template<typename _Type_>
_Type_ Base::fooT(_Type_ x, _Type_ y)
{
asm("");
return x + y;
}
int main(int argc, char *argv[])
{
int test = Base::fooT(1, 2);
printf("test = %d\n", test);
system("PAUSE");
return EXIT_SUCCESS;
}
संबंधित नहीं है, लेकिन अंडरस्कोर से शुरू होने वाले पहचानकर्ता एक कैपिटल के लिए आरक्षित हैं। – GManNickG
परिभाषा से __attribute __ ((noinline)) संलग्न नहीं होना चाहिए? – jpalecek
@jpalecek: कोई संकलन त्रुटि नहीं है – user176168