Tôi có nguồn cho thư viện lớn (> 250 tệp) sử dụng nhiều các vùng chứa và chuỗi STL. Tôi cần phải chạy nó trong một môi trường nhúng với heap hạn chế, vì vậy tôi muốn đảm bảo rằng chính thư viện này bị giới hạn trong việc sử dụng đống của nó.Thay thế phân bổ STL mặc định
Giải pháp hiển nhiên là tạo bộ cấp phát, nhưng sửa đổi toàn bộ cơ sở mã để bao gồm thông số mẫu cấp phát là một công việc lớn của phương sách cuối cùng và không mong muốn trong trường hợp tôi muốn dùng phiên bản mới của nguồn. Thay thế toàn cầu mới và xóa là không khả thi vì điều đó ảnh hưởng đến toàn bộ hình ảnh, không chỉ thư viện này.
Suy nghĩ tiếp theo của tôi là một thủ thuật macro C ngu ngốc, nhưng điều đó dường như không thể, mặc dù tôi thừa nhận không phải là tác giả vĩ mô thông minh.
Vì vậy, tôi nghĩ "là có một trình biên dịch hoặc chuyển đổi pragma để xác định phân bổ <> lớp học tại thời gian biên dịch"? Nhưng tôi mở cho bất cứ điều gì.
Câu hỏi tiếp theo tôi sẽ hỏi, nếu có ai có thể đưa ra giải pháp, là cách thực hiện tương tự cho mới/xóa trong tập hợp các tệp bao gồm thư viện này.
Tôi đang sử dụng gcc 3.4.4 toolchain để chạy dưới Cygwin, với mục tiêu của VxWorks, nếu điều đó kích thích bất kỳ ý tưởng nào.
gcc 3.4.4 Đủ tuổi để được gắn nhãn 'hoàn toàn bị hỏng'. Bất kỳ lý do nào khiến bạn không chuyển sang phiên bản mới hơn? – sehe
Tôi nghĩ rằng trong GCC đó chỉ là một macro đơn giản ở đâu đó trong interna, mà bạn sẽ có thể chuyển đổi. Mặc định là "cấp phát mới", nhưng GCC đi kèm với một số lựa chọn thay thế, như "cấp phát malloc" và cấp phát hồ bơi và không có gì. –
Giả sử bạn có thể tạo một heap giới hạn và sau đó quá tải 'toán tử new' cho thư viện này, vì vậy tất cả các cuộc gọi' operator new' trong thư viện đã đi tới vùng hạn chế của bạn. Bạn muốn hành vi nào khi heap giới hạn đầy và quá trình 'toán tử new' được nạp chồng được gọi là? Bạn có thực sự muốn 'toán tử new' thất bại trong những trường hợp đó không? Tôi không tin bạn sẽ làm thế, trừ khi thư viện đó vẫn có thể hoạt động khi 'toán tử new' thất bại. Có lẽ nếu thư viện là một bộ nhớ cache cơ sở dữ liệu, hoặc một cái gì đó như thế. Thư viện làm gì? –