Tôi phải kiểm tra xem một hàm có đang được biên dịch bởi trình biên dịch hay không. Có cách nào để làm điều này mà không cần nhìn vào lắp ráp (mà tôi không đọc). Tôi không có lựa chọn nào trong việc tìm ra điều này, vì vậy tôi thích nếu chúng ta không thể thảo luận về sự khôn ngoan của việc này. Cảm ơn!MSVC - Bất kỳ cách nào để kiểm tra xem chức năng có thực sự được gạch chân không?
Trả lời
Tạo tệp "MAP". Điều này cung cấp cho bạn địa chỉ của tất cả các chức năng không được nội tuyến. Nếu chức năng của bạn xuất hiện trong danh sách này, nó sẽ không được gạch chân, nếu không nó sẽ được inline hoặc được tối ưu hóa hoàn toàn (ví dụ: khi nó không được gọi).
Mỗi trang web cuộc gọi có thể khác nhau.
Trình biên dịch có thể quyết định cho một số phương thức cha mẹ nào đó có giá trị nội tuyến và đối với các phương thức cha mẹ khác mà nó không có giá trị nội tuyến. Vì vậy, bạn có thể không thực sự xác định câu trả lời thực sự mà không kiểm tra assembley tại mỗi trang web cuộc gọi.
Kết quả là bất kỳ công cụ nào bạn sử dụng đều có khả năng sẽ cung cấp cho bạn câu trả lời gây hiểu lầm. Nếu bạn sử dụng một công cụ kiểm tra sự tồn tại của biểu tượng (nó có thể có bởi vì một số trang web gọi cần nó, nhưng có khả năng nó có thể được inlined ở những người khác). Ngược lại việc thiếu biểu tượng không có nghĩa là phương thức/chức năng không được gạch chân nó có thể là tĩnh (như trong tệp tĩnh) và do đó trình biên dịch không cần giữ biểu tượng xung quanh (nhưng nó không được gạch chân).
Sử dụng tùy chọn trình biên dịch/FAs để kết xuất mã asm bằng mã nguồn là cách duy nhất tôi biết chắc chắn.
Lưu ý: nếu bạn muốn ép buộc chức năng nội tuyến, chỉ cần sử dụng __forceinline
.
Nếu bạn thực sự không muốn nhảy vào lắp ráp, hãy khai báo hàm là __forceinline và nếu tệp thực thi lớn hơn, bạn biết nó không được gạch chân.
Không nhất thiết. Một thành viên điển hình có được chức năng, ví dụ, thực sự có thể dẫn đến mã nhỏ hơn khi inlined. Nó sẽ dẫn đến một truy cập thành viên thông qua con trỏ này chứ không phải là một đẩy này, gọi hàm, truy cập thành viên thông qua này, trở về từ chức năng. –
Đúng, nhưng nếu nó đã được lót, __forceinline không nên thay đổi bất cứ điều gì, vì vậy những gì tôi nên nói là nếu kích thước thực thi thay đổi. Nắm bắt tốt. – Overflowed
-1, vấn đề là ngược lại không đúng vì những lý do mà Richard đưa ra. Nếu tệp thực thi không thay đổi kích thước của nó, bạn có thể kết luận điều gì? – MSalters
Nếu bạn bật cảnh báo C4714, C4710 và C4711, nó sẽ cung cấp cho bạn thông tin khá chi tiết về các chức năng nào và không được gạch chân.
- 1. Cách kiểm tra xem máy ảnh có được mở bằng bất kỳ ứng dụng nào không
- 2. Bất kỳ cách nào để kiểm tra các chức năng ẩn danh?
- 3. Kiểm tra xem có bất kỳ thay đổi đang chờ xử lý nào để được lưu
- 4. Cách tìm ra các hàm nào KHÔNG được gạch chân
- 5. Có cách nào để kiểm tra xem chế độ nghiêm ngặt có được thực thi không?
- 6. Bất kỳ cách nào khác để kiểm tra xem nhà cung cấp vị trí mạng có được bật không?
- 7. Làm cách nào để kiểm tra xem chức năng có phải là một phần không?
- 8. Cách kiểm tra xem URI yêu cầu có bất kỳ tham số nào không
- 9. Có chức năng Python nào kiểm tra xem máy phát điện có được khởi động không?
- 10. Chức năng kiểm tra xem chuỗi có phải là ngày
- 11. Làm cách nào để kiểm tra xem tập lệnh Perl không có bất kỳ lỗi biên dịch nào?
- 12. Bất kỳ cách nào để truy cập chức năng được cài đặt bởi makeActiveBinding?
- 13. Có chức năng nào để kiểm tra xem biến chuỗi là giá trị số không?
- 14. Cách kiểm tra xem JCheckBox có được kiểm tra không?
- 15. jQuery kiểm tra xem có bất kỳ đầu vào nào đã chọn trống không
- 16. Cách kiểm tra xem đối tượng có chức năng không? (DoJo)
- 17. Cách kiểm tra xem "Radiobutton" có được chọn không?
- 18. WinDBG Xem các đối số được truyền cho bất kỳ chức năng nào
- 19. Làm cách nào để kiểm tra xem điểm lặp STL có ở bất kỳ điểm nào không?
- 20. Làm cách nào để kiểm tra xem ArrayList có chứa bất kỳ phần tử nào của một ArrayList khác không?
- 21. Kiểm tra xem sự kiện có EventHandler được gán
- 22. jQuery - Làm thế nào để kiểm tra xem phần tử có bất kỳ các lớp
- 23. Cách kiểm tra thư mục để kiểm tra xem tệp mới có được thêm vào không?
- 24. Thực hiện bất kỳ trình biên dịch c nào có thực hiện bất kỳ tính năng C1X nào không?
- 25. Kiểm tra xem bất kỳ thuộc tính nào đã được gán giá trị
- 26. Kiểm tra xem chức năng có được khai báo bằng bộ tiền xử lý C không?
- 27. JLabel được gạch chân
- 28. Làm cách nào để kiểm tra xem cạnh có trong chu kỳ không?
- 29. Cách dễ nhất để kiểm tra xem chuỗi có chứa bất kỳ thẻ hình ảnh nào không?
- 30. Làm thế nào để kiểm tra xem một đơn vị mã chức năng đã cho (C#) KHÔNG tạo/ghi bất kỳ tệp nào vào đĩa?
__forceinline không buộc nội tuyến trong mọi trường hợp. http://msdn.microsoft.com/en-us/library/z8y1yy88.aspx –