Tôi hiện đang trong quá trình xây dựng một hệ thống nhúng, sử dụng bộ xử lý ARM Cortex M3, với 64 KB SRAM. Hiện tại, tôi đang tìm cách để đảm bảo hiệu suất xác định với các container STL, bao gồm việc đảm bảo rằng tôi không thể hết bộ nhớ trong thời gian chạy.STL trong hệ thống nhúng với bộ nhớ rất hạn chế
Tôi chủ yếu quan tâm đến cách các container STL thực hiện phân bổ bộ nhớ động. Mặc dù tôi có thể sử dụng một phân bổ tùy chỉnh để có các cấu trúc này lấy bộ nhớ từ một nhóm mà tôi đặt sang một bên, tôi sẽ cần phải thiết lập một nhóm riêng biệt cho mỗi cấu trúc để đảm bảo một thể hiện của một cấu trúc không thể chiếm không gian của một cá thể khác.
Tôi đang làm việc với các cá nhân khác trong dự án này, những người không muốn quan tâm đến việc cấp phát bộ nhớ và muốn sử dụng cấu trúc dữ liệu "nổi tiếng" (stack, queue, deque, v.v ...) . Vì vậy, tôi hiện đang xem xét việc xây dựng các trình bao bọc xung quanh C-mảng để cung cấp các cấu trúc này. Điều này sẽ cho phép phân bổ tĩnh bộ nhớ cần thiết để hỗ trợ các thùng chứa này và cho phép các nhà phát triển khác biết kích thước của vùng chứa mà họ đã khởi tạo trước thời gian chạy, dựa trên thông tin kích thước mã do trình biên dịch cung cấp. Theo ý kiến của tôi, điều này đảm bảo rằng các vấn đề cúp bộ nhớ không thể xảy ra trong thời gian chạy, và đơn giản hóa thiết kế hệ thống đáng kể.
Tùy chọn khác sẽ liên quan đến phân bổ container STL khi khởi tạo hệ thống. Sau giai đoạn khởi tạo, không thể phân bổ bộ nhớ động bổ sung. Tuy nhiên, với kiến thức của tôi, các cấu trúc dữ liệu C++ STL chuẩn không hỗ trợ điều này - nó sẽ yêu cầu các thùng chứa như một ngăn xếp có khả năng được phân bổ trước (tương tự như một vectơ).
Tôi đánh giá cao bất kỳ nhận xét nào về đề xuất của tôi về việc xây dựng các lớp học xung quanh tiêu chuẩn C-mảng? Ngoài ra, có cách nào đơn giản hơn để phân bổ một vùng chứa STL kích thước tĩnh, chẳng hạn như một chồng xếp hàng hoặc kích thước tĩnh, tại thời gian biên dịch không? (Tôi biết điều này là có thể với vector, nhưng những người khác tôi không chắc chắn)
Lưu ý: Tôi đã đọc qua một câu hỏi khác (Embedded C++ to use STL or not), nhưng tác giả của câu hỏi này không làm rõ bộ nhớ của họ đã có (khác sau đó làm thế nào họ đã được sử dụng một quá trình ARM7) hoặc xuất hiện để được xem xét một giải pháp tương tự như tôi.
Lưu ý thứ hai: Tôi biết rằng đối với một số nhà phát triển, 64 KB SRAM có thể trông giống như nhiều bộ nhớ. Trong thực tế, tôi đã thực hiện phát triển trên bộ vi xử lý AVR với bộ nhớ ít hơn đáng kể, vì vậy tôi hiểu quan điểm này. Tuy nhiên, từ quan điểm hiện tại của tôi (có lẽ không được hiểu rõ), 64 KB bộ nhớ không nhiều khi nói về các container STL.
Vào cuối ngày, tôi đã đi với EASTL. Dễ sử dụng và hoạt động tốt. – BSchlinker