Припустимо, є два потоки, які спілкуються, асинхронно надсилаючи повідомлення один одному. Кожен потік має якусь чергу повідомлень.
У мене питання дуже низький: Який очікується, що це найефективніший спосіб управління пам'яттю? Я можу придумати кілька рішень:
- Відправник створює об'єкт через
new
. Дзвінки приймачаdelete
. - Об'єднання пам’яті (для повернення пам’яті назад відправника)
- Збір сміття (наприклад, Boehm GC)
- (якщо об’єкти досить малі) скопіюйте за значенням, щоб уникнути виділення купи повністю
1) є найбільш очевидним рішенням, тому я буду використовувати його для прототипу. Швидше за все, це вже досить добре. Але незалежно від моєї конкретної проблеми, мені цікаво, яка методика є найбільш перспективною, якщо ви оптимізуєте продуктивність.
Я б очікував, що об'єднання теоретично є найкращим, тим більше, що ви можете використовувати додаткові знання про потік інформації між потоками. Однак я побоююсь, що це також найскладніше отримати право. Багато налаштування ... :-(
Збір сміття повинен бути досить простим після додавання (після рішення 1), і я би очікував, що це буде дуже добре. Отже, я думаю, що це найбільш практичне рішення, якщо 1) виявиться занадто неефективним.
Якщо об’єкти невеликі та прості, копія за значенням може бути найшвидшою. Однак я боюся, що це змушує зайвих обмежень щодо реалізації підтримуваних повідомлень, тому я хочу цього уникнути.