Sürüm oluşturma işlemleri için -finline işlevleri optimizasyonu ile gcc kullanıyorum. Kod bloat ile mücadele etmek için gömülü bir sistem üzerinde çalıştığım için söylemek istiyorum ki belirli işlevleri inline etmeyin. Bunu yapmanın bariz yolu, özniteliği (noinline) gibi işlev öznitelikleri yoluyla olur. Sorun şu ki, -O3 anahtarının bir parçası olan global -finline-function optimizasyonunu açtığımda işe yaramıyor.gcc -finline-functions davranışı?
Ayrıca, aynı işlevin templated olmayan bir sürümü beklendiği gibi satır içi alınıp alınmadığından, şablonla işlenmesi gereken bir şey de vardır.
Bu global anahtar açıkken, inlinasyonu nasıl kontrol edeceğine dair herhangi bir fikri var mı?
#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;
}
İlgili değil, ancak altyazı ile başlayan tanımlayıcılar büyük harfle takip edilir ve derleyici için ayrılır. – GManNickG
__attribute __ ((noinline)) tanımına eklenmemeli mi? – jpalecek
@jpalecek: Bu bir derleme hatası yok – user176168