Điều quan trọng là, trước khi cố gắng tối ưu hóa bất kỳ, để cấu hình mã. Hãy xem mã nguồn đang được tạo và chỉ tối ưu hóa khi bạn hiểu những gì đang diễn ra.
Và như đã được chỉ ra, tối ưu hóa tốt nhất là không làm điều gì đó, nhưng để thực hiện một thay đổi cấp cao hơn mà loại bỏ sự cần thiết.
Tuy nhiên ...
Hầu hết các thay đổi mà bạn có thể muốn trivially thực hiện ở đây, có thể sẽ là điều các trình biên dịch đã được thực hiện (một sự thay đổi cũng giống như một nhân để trình biên dịch). Một số có thể thực sự ngăn không cho trình biên dịch thực hiện tối ưu hóa (thay đổi add
thành or
sẽ hạn chế trình biên dịch - có nhiều cách để thêm số và chỉ bạn biết rằng trong trường hợp này kết quả sẽ giống nhau).
Số học con trỏ có thể tốt hơn, nhưng trình biên dịch không phải là ngu ngốc - nó phải đã tạo mã phong nha để dereferencing mảng, vì vậy bạn cần phải kiểm tra xem bạn có thực sự làm vấn đề tồi tệ hơn bằng cách giới thiệu một biến bổ sung.
Trong trường hợp này, số vòng lặp được xác định rõ và bị giới hạn, vì vậy việc kiểm tra có thể có ý nghĩa.
Thêm nữa tùy thuộc vào cách bạn muốn kết quả phụ thuộc vào kiến trúc đích của bạn. Nếu bạn muốn tính di động, thật khó (er) để tối ưu hóa.
Ví dụ, sau đây tạo ra mã tốt hơn ở đây:
unsigned int x0 = *(unsigned int *)array;
unsigned int x1 = *(unsigned int *)(array+4);
int decimal = ((x0 * 0x8040201) >> 20) + ((x1 * 0x8040201) >> 24);
tôi có lẽ cũng có thể cuộn một phiên bản 64-bit mà đã 8 bit tại một thời điểm thay vì 4.
Nhưng nó rất chắc chắn không phải mã di động. Tôi có thể sử dụng nó ở địa phương nếu tôi biết những gì tôi đã chạy trên và tôi chỉ muốn số khủng hoảng nhanh chóng. Nhưng tôi có lẽ sẽ không đặt nó trong mã sản xuất. Chắc chắn không phải không ghi lại những gì nó đã làm, và không có bài kiểm tra đơn vị đi kèm để kiểm tra xem nó có thực sự hoạt động hay không.
Nó không quan trọng nó các bit đang ở trong một mảng hoặc như một chuỗi, bạn phải lặp qua các bit anyway. Có thể có nhiều cách cụ thể hơn C++ để làm điều đó nhưng cuối cùng sẽ luôn có một vòng lặp trên các bit. –
[câu hỏi này] (http://stackoverflow.com/questions/1686004/fastest-way-to-convert-binary-to-decimal) có thể giúp bạn – Oren
Thường lợi ích tối ưu hóa lớn có thể đạt được không phải từ các chức năng nhỏ, nhưng tìm kiếm ở cấp độ cao hơn. Tại sao các chữ số được lưu trữ theo cách này? – maxim1000