2010-10-07 19 views
5

Tôi đã nghe nói rằng các phiên bản gcc gần đây rất tốt trong việc chuyển đổi cuộc gọi thông qua các con trỏ hàm để gọi trực tiếp. Tuy nhiên, tôi không thể tìm thấy bất kỳ điều gì về nó trên web hoặc giao diện nhanh thông qua mã nguồn của gcc. Có ai biết nếu điều này là thực sự đúng sự thật và nếu như vậy, những gì nó sử dụng thuật toán để làm điều này?Thuật toán nào gcc sử dụng để chuyển đổi cuộc gọi thông qua các con trỏ hàm để gọi trực tiếp?

+0

Tôi không quen thuộc với hoạt động bên trong gcc, nhưng nói chung, nếu một trình biên dịch có thể chứng minh rằng một con trỏ hàm chỉ có thể có một giá trị cụ thể tại một trang gọi nào đó, sau đó cuộc gọi đó có thể được mã hóa như một cuộc gọi trực tiếp đến giá trị con trỏ cụ thể hơn là một cuộc gọi gián tiếp thông qua con trỏ hàm. –

Trả lời

0

Nó chỉ là một hình thức tuyên truyền giá trị. Nếu tôi có thể chứng minh rằng con trỏ đối tượng p (đến một cals ảo) luôn trỏ đến một đối tượng của một lớp cụ thể cụ thể, thì tôi có thể gọi trực tiếp các hàm thành viên của lớp đó. Nếu không, tôi phải trải qua vtable.

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