Це може здатися дивним питанням, але в моєму відділі у нас виникають проблеми з наступною ситуацією:
Ми працюємо тут над серверним додатком, який стає все більшим і більшим, навіть у той момент, коли ми розглядаємо можливість розділити його на різні частини (DLL-файли), динамічно завантажуючи при необхідності та вивантажуючи згодом, щоб мати можливість обробляти питання продуктивності.
Але: функції, які ми використовуємо, передають параметр вводу та виводу як об'єкти STL, і як зазначено у відповіді на переповнення стека , це дуже погана ідея. (У публікації є кілька ± рішень та хак, але все це виглядає не дуже солідно.)
Очевидно, що ми могли замінити параметри вводу / виводу на стандартні типи C ++ та створити об'єкти STL з тих, що потрапляють у функції, але це може спричинити зниження продуктивності.
Чи гарно зробити висновок, що, якщо ви плануєте створити додаток, який може зрости настільки великим, що один єдиний ПК більше не може впоратися з ним, ви взагалі не повинні використовувати STL як технологію?
Більше інформації щодо цього питання:
Мабуть, є деякі непорозуміння щодо питання: проблема полягає в наступному:
Моя програма використовує величезну кількість продуктивності (процесор, пам'ять) для того, щоб завершити свою роботу, і я хотів би розділити цю роботу на різні частини (оскільки програма вже розбита на декілька функцій), не так складно створити деякі DLL з мого додатку і помістити деякі функції в експортну таблицю цих DLL. Це призведе до наступної ситуації:
+-----------+-----------+----
| Machine1 | Machine2 | ...
| App_Inst1 | App_Inst2 | ...
| | |
| DLL1.1 | DLL2.1 | ...
| DLL1.2 | DLL2.2 | ...
| DLL1.x | DLL2.x | ...
+-----------+-----------+----
App_Inst1 - це екземпляр програми, встановленої на Machine1, тоді як App_Inst2 - це екземпляр того ж додатку, встановленого на Machine2.
DLL1.x - це DLL, встановлений на Machine1, тоді як DLL2.x - це DLL, встановлений на Machine2.
DLLx.1 охоплює експортовану функцію1.
DLLx.2 охоплює експортовану функцію2.
Тепер на Machine1 я хотів би виконати function1 та function2. Я знаю, що це перевантажить Machine1, тому я хотів би надіслати повідомлення App_Inst2, попросивши цей екземпляр програми виконати функцію2.
Параметри вводу / виводу funk1 та function2 - це об'єкти STL (бібліотека стандартного типу C ++), і я регулярно можу очікувати, що клієнт буде оновлювати App_Inst1, App_Inst2, DLLx.y (але не всі з них клієнт може оновити Machine1, але не Machine2, або лише оновлення програм, але не DLL або навпаки, ...). Очевидно, якщо інтерфейс (параметри вводу / виводу) змінюються, то замовник змушений робити повне оновлення.
Однак, як згадується у згаданій URL-адресі StackOverflow, проста повторна компіляція App_Inst1 або однієї з DLL може спричинити розпад всієї системи, отже, моє оригінальне заголовок цієї публікації, не рекомендуючи використання STL (стандартний шаблон C ++) Бібліотека) для великих додатків.
Я сподіваюся, що цим я прояснив деякі питання / сумніви.