2010-11-18 26 views
6

Tôi đang ở trong một trường lập trình trò chơi và ở đây chúng tôi phải tìm hiểu về tốc độ mã, điều gì đó có vẻ quan trọng.C/C++ dịch sang lắp ráp, hành vi bộ nhớ mức thấp: làm thế nào nó được thực hiện?

Có bất kỳ hướng dẫn hoặc danh sách những điều cần lưu ý khi lập trình trong C/C++ không? Tôi tự hỏi về nhiều thứ, như lý do tại sao hành vi mặc định của C là truyền dữ liệu thay vì tham chiếu/địa chỉ, hoặc trình biên dịch dịch một tham chiếu đến assembly, hoặc cách vòng lặp C dịch chính nó sang JMP.

Tôi lo ngại về điều đó vì python sử dụng cách khác, nhưng mặt khác python không sử dụng toán tử để sao chép giá trị, thay vì hàm có thể cú pháp nặng.

tôi không thực sự nghĩ rằng biết làm thế nào để chương trình trong lắp ráp thực sự là cần thiết, vì nó đau đớn, tôi đoán nó chỉ cần thiết để biết về một đăng ký, vv

+1

Cuối cùng câu hỏi này đi xuống "Có bất kỳ hướng dẫn hoặc danh sách những điều cần lưu ý khi lập trình trong C/C++ không?" Đối với điều đó, tôi muốn chỉ cho bạn ở đây: [http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list] –

+1

Bắt buộc "tối ưu hóa sớm là ác" bình luận ở đây. Nếu thuật toán của bạn là 'O (quá nhiều)' (ví dụ: trong trò chơi dựa trên nền gạch, lặp lại tất cả các đối tượng trong trò chơi để tìm hiểu xem có X bên cạnh trình phát) hay không, kiến ​​thức sâu về C hoặc Hội không thể có thể cứu bạn. Tối ưu hóa các nỗ lực tối ưu hóa của riêng bạn - tìm ra nơi tối ưu hóa có ý nghĩa ở tất cả (bằng cách lược tả, không phải bằng cách đoán) và "tối ưu hóa" với suy nghĩ. Ngoài ra, propably "không phải là một câu hỏi thực sự". – delnan

+0

Bạn cần phải biết lắp ráp, vì vậy bạn hiểu làm thế nào một máy tính thực sự hoạt động, vì vậy bạn có thể tối ưu hóa cho nó. –

Trả lời

6

Tra cứu tài liệu hướng dẫn của trình biên dịch của bạn cho chuyển sang đầu ra các bước asm chứ không phải là mã máy. Mỗi trình biên dịch tôi đã làm việc với một trình biên dịch. Sử dụng nó để gửi một số mã đơn giản đến asm và kiểm tra nó.

VS cũng có tùy chọn 'xem lắp ráp' khi bạn thực hiện bước qua mã.

Sẽ không có bất kỳ câu trả lời rõ ràng nào cho câu hỏi của bạn. Tất cả đều phụ thuộc vào trình biên dịch và kiến ​​trúc. Ngay cả trên các đối số được cung cấp cho trình biên dịch.

Chỉnh sửa:

Thực tế là không có câu trả lời rõ ràng cho câu hỏi của bạn sẽ không ngăn mọi người làm mọi thứ. Một ví dụ là những điều ngớ ngẩn như truyền một đối tượng lớn (như một chuỗi: p) bằng tham chiếu thay vì trả về giá trị. Những điều này có vẻ hợp lý với một nhà phát triển C++ mới. OF COURSE truyền một chuỗi vào một hàm để được điền nhanh hơn xây dựng một bản sao và trả về nó từ hàm đó chỉ để sao chép nó một lần nữa trong bài tập. Sự thật của vấn đề là nó không hoạt động theo cách đó; nó phụ thuộc rất nhiều vào trình biên dịch nhưng bạn có thể dậm dẫm khả năng của trình biên dịch để tối ưu hóa bằng cách cố gắng để có được tất cả thông minh.

Có TẤN thông tin sai lệch về việc tạo mã của bạn nhanh chóng. Lấy tất cả bằng một hạt muối. Hầu hết những người yêu cầu bồi thường để biết làm thế nào để làm cho mã nhanh là đầy đủ của crap. Câu trả lời hợp lý duy nhất cho mã nhanh là lập hồ sơ cho mã của bạn. Khi đến thời điểm tối ưu hóa vi mô, bạn sẽ thực hiện một loạt các công cụ rất cụ thể cho nền tảng mục tiêu của mình. Kiến thức chung, "đây là nhanh hơn," công cụ sẽ không được sử dụng bất kỳ cho bạn tại thời điểm đó.

+0

Vì vậy, tôi đoán tôi phải khám phá các thuật toán cấp cao hơn và mẫu thiết kế để đưa ra giải pháp nhanh hơn cho từng tình huống. Mặc dù tôi tự hỏi làm thế nào một động cơ như quake3 là nhanh như vậy. – jokoon

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