Ответ 1
msvcrXXXX.dll - это DLL для библиотеки времени выполнения C. msvcpXXXX.dll - это DLL для библиотеки времени выполнения С++.
Одна или обе эти зависимости будут добавлены к вашему двоичному файлу, если вы создаете с помощью /MD или/MDd, которые по умолчанию заданы Visual Studio при создании нового проекта на С++. Использование любого из этих флагов означает, что вы хотите, чтобы ваша программа связывалась со версией DLL для среды выполнения C/С++. Вы можете изменить настройки по умолчанию в разделе "Свойства проекта" → "Свойства конфигурации" → "C/С++/Генерация кода/Библиотека времени выполнения".
Если вы измените свой проект на использование /MT или/MTd, ваше приложение не будет генерировать ссылки на одну из DLL, перечисленных выше, потому что время выполнения C/С++ будет напрямую связано с вашей программой. Для большинства простых программ это не вызовет никаких проблем. Однако, если ваша программа разбита на несколько DLL, все из которых построены с использованием этих флагов, то каждая DLL будет поддерживать копию ссылочных функций CRT и статических данных, и вы можете столкнуться с проблемами выделения/освобождения памяти. Чтобы этого избежать, вы должны убедиться, что объекты, выделенные в данной DLL, также освобождены в том же модуле.
В целом, более эффективно использовать флаги /MD и/MDd для приложений с несколькими модулями (DLL), поскольку все эти модули будут совместно использовать одну копию библиотек времени выполнения C/С++ и связанных с ними данных структур в рамках прикладного процесса.
Для простых одномодульных приложений, однако, не стесняйтесь создавать с помощью /MT или MTD.