2010-07-18 29 views
5

Tôi muốn biên soạn danh sách các tính năng C++ không được khuyến khích sử dụng trong các hệ thống nhúng (và có thể khiến mọi người đề xuất c trên C++). Vui lòng thử thêm lý do tại sao nếu bạn biết hoặc thêm câu trả lời của bạn cho người khác.Cần tránh các tính năng C++ để phát triển nhúng

Dưới đây là một cho một sự khởi đầu (là người duy nhất tôi biết)

  • động đa hình, không biết tại sao, nhưng ai đó nói đó là "tốn kém"

Trả lời

4

Một số tính năng nhất định cần hỗ trợ thời gian chạy, vì vậy nếu bạn bỏ lỡ sự hỗ trợ cần thiết, bạn nên tránh những tính năng đó. Đặc biệt, các tính năng sau thường cần thêm hỗ trợ thời gian chạy:

  • ngoại lệ
  • RTTI
  • cấp phát bộ nhớ động
  • thừa kế ảo (một chút không chắc chắn về việc này)

Mọi người cũng thường đề cập đến các mẫu, nhưng chúng chỉ là một cơ sở macro nâng cao - vì vậy bạn có thể tự do sử dụng chúng trong các hệ thống nhúng. Tuy nhiên, bạn có thể muốn tránh chúng vì chúng có thể dẫn đến mã bloat sau khi biên dịch.

Hệ thống nhúng của bạn nên đi kèm với tài liệu hướng dẫn, nếu có, hỗ trợ thời gian chạy cho C++ (và nếu không) có sẵn.

+5

Thừa kế ảo không cần hỗ trợ thời gian chạy. Nó đi kèm với một chi phí, mặc dù (một bổ sung indirection khi truy cập vào các thành viên lớp cơ sở). Nếu bạn cần tránh chi phí thời gian chạy, thì bạn cần phải tránh thừa kế ảo., – sbi

3

Bạn nên chọn tính năng tùy thuộc vào thiết bị của bạn. Nó có thể là hợp lý đối với một số tính năng hoặc có thể không. Nó phụ thuộc vào kiến ​​trúc của nó. Ví dụ: Google có phiên bản trình biên dịch C++ đã giảm cho nền tảng Android. Quy tắc chung đơn giản là tránh các công trình sẽ dẫn đến mã thời gian chạy quá nhiều.

9

Tiêu chuẩn mã hóa máy bay chiến đấu chung khớp ở đây: http://www2.research.att.com/~bs/JSF-AV-rules.pdf là tổng quan khá tốt về cách sử dụng C++ cho lập trình được nhúng.

Lệnh cấm đa hình động là sự lưu giữ từ những năm 90 và không có cơ sở hợp lý. Nó không còn gọi hàm ảo nữa để thực hiện chuyển đổi và cuộc gọi. Nếu bạn muốn tránh các cuộc gọi chức năng ảo, bạn cũng có thể đang sử dụng C.

2
  1. Sử dụng mẫu quá mức. Nhiều mẫu instantiations với các tham số khác nhau sẽ tạo ra nhiều bản sao của cùng một hàm trong mã đối tượng của bạn, do đó tăng kích thước của nó, trừ khi trình biên dịch đủ thông minh để gấp mã giống nhau (ví dụ: nếu mẫu phụ thuộc vào loại T, instantiation with int hầu hết các trường hợp đều giống hệt với instantiation với long).
    Cách để tránh tăng kích thước mã với mẫu, bạn có thể viết phiên bản lõi không an toàn của mã và có trình bao bọc mẫu an toàn loại mỏng.
  2. dynamic_cast có thể khá tốn kém về CPU vì nó cần quét phân cấp lớp và so sánh chuỗi các tên lớp [cần dẫn nguồn].
Các vấn đề liên quan