Khi biên dịch C++ với GCC 4.4 hoặc MSVC, trình biên dịch có thể phát ra các thông điệp khi một hàm được gạch chân không?Tìm hiểu các chức năng nào được inline
Trả lời
Với g ++, tôi không nghĩ rằng bạn có thể làm cho g ++ báo cáo đó, nhưng bạn có thể kiểm tra nhị phân kết quả với bất kỳ công cụ cho thấy biểu tượng, nm
ví dụ:
#include <iostream>
struct T {
void print() const;
};
void T::print() const { std::cout << " test\n" ; }
int main()
{
T t;
t.print();
}
~ $ g++ -O3 -Wall -Wextra -pedantic -o test test.cc
~ $ nm test | grep print
0000000000400800 t _GLOBAL__I__ZNK1T5printEv
0000000000400830 T _ZNK1T5printEv
vs
#include <iostream>
struct T {
void print() const { std::cout << " test\n" ; }
};
int main()
{
T t;
t.print();
}
~ $ g++ -O3 -Wall -Wextra -pedantic -o test test.cc
~ $ nm test | grep print
(không có đầu ra từ nm trong trường hợp thứ hai)
CHỈNH SỬA: Ngoài ra, có thể sử dụng profilers. gprof cho thấy, trên hai ví dụ này:
0.00 0.00 0.00 1 0.00 0.00 global constructors keyed to _ZNK1T5printEv
0.00 0.00 0.00 1 0.00 0.00 T::print() const
so với chỉ
0.00 0.00 0.00 1 0.00 0.00 global constructors keyed to main
FWIW, tùy thuộc vào cách các chức năng được sử dụng, trình biên dịch có thể nội tuyến một số trường hợp và không phải người khác. Nếu chương trình đủ lớn, điều gì đó phức tạp hơn sẽ là cần thiết. – Cogwheel
Thật vậy. Tôi tự hỏi nếu bất kỳ profilers báo cáo một cái gì đó như thế (gprof không xuất hiện). Có thể là một công cụ nhỏ hữu ích để viết. – Cubbi
Cảm ơn. Tôi có thể thấy sự khác biệt trong các tệp nhị phân được biên dịch. Phiên bản chỉ tiêu đề dường như đã có nhiều chức năng hơn. Tôi chạy trên gprof trước (biên dịch với -pg) và không thể có nhiều sự khác biệt giữa hai. Tôi chỉ chạy các chương trình trên callgrind và phiên bản tiêu đề chỉ xuất hiện để có inlined tại rất nhiều chức năng như họ không hiển thị trong đầu ra callgrinds. –
- 1. Tìm hiểu Nếu một chức năng đã được gọi là
- 2. chức năng inline vs chức năng vĩ mô
- 3. Hành vi của __LINE__ trong các chức năng inline
- 4. C99 chức năng inline trong file .c
- 5. array_map inline chức năng ẩn danh
- 6. Tìm hiểu chức năng javascript nào được kích hoạt khi nhấp vào ...
- 7. Hiểu chức năng bản đồ
- 8. Xác định một destructor ngăn chặn các chức năng của thành viên được inline
- 9. Chức năng nhấp chuột jQuery vs inline onclick
- 10. Làm cách nào để tìm hiểu chức năng nào được gọi khi nhấn nút trong Bảng điều khiển Chrome?
- 11. Phạm vi chức năng Hiểu rõ ràng
- 12. Javascript tìm chức năng gọi
- 13. Tìm hiểu những chức năng nào của thư viện C tĩnh có
- 14. Object và chức năng khá khó hiểu
- 15. chức năng tìm kiếm()?
- 16. Tìm các chức năng tối thiểu
- 17. Python - chức năng "tìm"?
- 18. Làm cách nào để tìm hiểu chức năng javascript đang được gọi bởi sự kiện onclick của đối tượng?
- 19. Chức năng Bash -> Lệnh không được tìm thấy
- 20. Tìm hiểu về các tính năng của C++ 0x
- 21. Tìm hiểu xem đối số chức năng có phải là một phần của cuộc gọi hàm
- 22. Tìm các chức năng với các đối số cụ thể
- 23. Dễ hiểu Cubic - Đối số chức năng Giải thích
- 24. Chức năng không được gọi là
- 25. scikit tìm hiểu: số lượng các tính năng tốt nhất (k) không được chọn
- 26. Tôi có thể tìm hiểu thêm về chức năng dịch thuật của PyPy ở đâu?
- 27. Chức năng JSTL không được tìm thấy trong JSF
- 28. Hiểu C cài đặt chức năng thư viện cài sẵn
- 29. Tìm tất cả các chức năng được trang trí trong một mô-đun
- 30. Tìm Tham số Chức năng Dll
Câu hỏi hay nhưng tôi tò mò về động cơ của bạn. – Daniel
Tôi tái cấu trúc mã di chuyển rất nhiều mã từ tiêu đề đến tập tin cpp và bây giờ nó chạy chậm hơn. Tôi muốn xem nếu có sự khác biệt về số lượng chức năng nội tuyến –
Bạn đang xây dựng như thế nào? Phát hành hoặc gỡ lỗi? Bạn đang chỉ định/OPT cho Visual Studio là gì? –