Tôi đang sử dụng gcc với tối ưu hóa chức năng -finline cho bản phát hành bản phát hành. Để chống lại code bloat bởi vì tôi làm việc trên một hệ thống nhúng tôi muốn nói không inline các chức năng cụ thể. Cách rõ ràng để làm điều này là thông qua các thuộc tính hàm tức là thuộc tính (noinline). Vấn đề là điều này dường như không hoạt động khi tôi chuyển sang tối ưu hóa chức năng toàn cầu -finline là một phần của chuyển đổi -O3.hành vi gcc -finline-functions?
Nó cũng có một số việc cần làm với nó được tạo khuôn mẫu như là một phiên bản không có khuôn mẫu của cùng một chức năng không nhận được nội tuyến như mong đợi.
Có ai biết cách kiểm soát nội tuyến khi bật công tắc toàn cục này không?
Dưới đây là các 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;
}
Không liên quan, nhưng số nhận dạng bắt đầu bằng dấu gạch dưới theo sau là chữ cái viết hoa được dành riêng cho trình biên dịch. – GManNickG
Không nên __attribute __ ((noinline)) được gắn vào định nghĩa? – jpalecek
@jpalecek: Không có lỗi biên dịch – user176168