2012-06-24 30 views
8

tôi đã nghiên cứu rằngĐộ sâu của nội tuyến trong trình biên dịch GCC

Từ khoá inline là một gợi ý để trình biên dịch rằng nó nên cố gắng để tạo ra mã [...] inline chứ không phải đặt xuống mã cho chức năng một lần và sau đó gọi thông qua chức năng gọi thông thường cơ chế.

Câu hỏi:

  1. Nếu tối ưu hóa được tắt cho trình biên dịch GCC, được sự xác định inline bỏ qua?
  2. Khi các hàm nội tuyến được gọi đệ quy, tùy chọn trình biên dịch nào xác định 'chiều sâu nội tuyến', cho đến khi nó theo cơ chế gọi hàm bình thường?
  3. Nếu hàm nội tuyến được gọi bên trong vòng lặp for, thì 'chiều sâu nội tuyến' có giống nhau không?

Trả lời

7

Nếu tối ưu hóa được tắt cho trình biên dịch GCC, trình theo dõi nội tuyến có bị bỏ qua không?

Có, nếu tối ưu hóa được tắt trong GCC, sẽ không có chức năng nào được gạch chân. Nó tương đương với việc sử dụng cờ -fno-inline trong khi biên dịch. Xem này link

-fno-inline

Don't pay attention to the inline keyword. Normally this option is used to keep the compiler from expanding any functions inline. Note that if you are not optimizing, no functions can be expanded inline.

Khi chức năng inline được gọi là đệ quy, trong đó trình biên dịch tùy chọn xác định 'chiều sâu của nội tuyến', cho đến khi nó đi theo cơ chế chức năng cuộc gọi bình thường không?

Tùy chọn max-inline-recursive-depthmax-inline-recursive-depth-auto. Độ sâu mặc định là 8.

2

Ngoài -fno-inline, bạn cũng cần sử dụng -fno-default-inline để vô hiệu hóa các hàm nội tuyến trong các lớp. Điều này rất hữu ích khi bạn sử dụng gdb để bước vào các hàm nội tuyến đó.

Các vấn đề liên quan