Это может звучать странно, но в моем отделе у нас возникают проблемы со следующей ситуацией:
Мы работаем здесь над серверным приложением, которое становится все больше и больше, даже в тот момент, когда мы рассматриваем его разделение на разные части (файлы 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 с просьбой, чтобы этот экземпляр приложения выполнил function2.
Параметры ввода / вывода для function1 и function2 являются объектами STL (стандартная библиотека типов C ++), и регулярно я могу ожидать, что клиент будет обновлять App_Inst1, App_Inst2, DLLx.y (но не все из них, клиент может обновить Machine1, но не Machine2, или только обновить приложения, но не библиотеки DLL или наоборот, ...). Очевидно, что если интерфейс (параметры ввода / вывода) изменится, то клиент вынужден выполнить полную модернизацию.
Однако, как упомянуто в упомянутом URL-адресе StackOverflow, простая повторная компиляция App_Inst1 или одной из библиотек DLL может привести к развалу всей системы, поэтому мой первоначальный заголовок этого поста не рекомендует использовать STL (стандартный шаблон C ++ Библиотека) для больших приложений.
Я надеюсь, что этим я прояснил некоторые вопросы / сомнения.