When compiling with /MD it means that the dlls are not included with the .exe, that's why you have to distribute vcruntime140.dll with the exe (unless the user has Visual C++ Redistributable for Visual Studio 2015 installed)
- The dll is exposed to system updates
- The executable will be smaller.
- The code segment of a DLL is shared amongst all processes that are actively using it (reducing the total amount of RAM consumed).
- Will allow to modify/delete/create memory from dll in exe, exe in dll and dll in dll,
- The dll is exposed to system updates which can break your exe.
- You need to distribute the dll with the exe.
When compiling with /MT it means that the dlls are included with the .exe.
- You don't need to distribute the dll with the exe.
- The executable is bigger.
- It will use more RAM.
- It is very likely to cause memory leaks and crash your exe. (CriticalObject, VirtualAlloc, HeapAlloc, etc.)
- The dll is not exposed to system updates.
- Both are character encodings (actually Unicode refers to the character set), ANSI is very old while Unicode is the current standard we use today.
- ANSI programs are slower than Unicode.
- Unicode programs won't work on old computers.
- With your ANSI exe you won't be able to use characters like "Ç" or "Ñ"