W ramach narzędzi Windows Driver Development Kit, masz program dependencywalker. Na witrynie macierzystej programu, niestety są wersje starsze. Program pozwoli zaprezentować Ci z jakich bibliotek .dll dany .exe korzysta.
https://developer.microsoft.com/en-us/windows/hardware
http://www.dependencywalker.com/
Jeśli chcesz zmniejszyć objętość dystrybuowanych programów, dobrym wyborem będzie kompilacja z bibliotekami współdzielonymi. Niestety jest wtedy ryzyko braku bibliotek współdzielonych w systemie docelowym. Jeśli masz wzór takiego systemu (ja polecam pracę z obrazami maszyn wirtualnych), w przypadku braku biblioteki .dll, kopiujesz ją do katalogu programu. Wtedy uruchamiany program ją "zobaczy".
Spora objętość Twoich programów może wynikać z:
- Braku optymalizacji redukującej objętość programu (dla gcc przełącznik -Os (minus Ooo Ess), dla MSVC /Os) https://docs.microsoft.com/en-us/cpp/build/reference/o-options-optimize-code?view=vs-2017
- Źle wybranych opcji kompilacji - biblioteka statyczna powoduje zwiększenie objętości programu.
- Braku opcji wbudowania symboli dla linkera (dla gcc to -fdata-sections -ffunction-sections i na etapie konsolidacji -Wl,-gc-sections ) ... ewentualnie użycie likowania lto .. przystępne tłumaczenie: https://johanengelen.github.io/ldc/2016/11/10/Link-Time-Optimization-LDC.html
- Rozwlekłych struktur danych które masz w swoim programie... no tu już źródła by pomogły.
Ogólnie przy domyślnych opcjach kompilacji programy w gcc (a więc podstawowym kompilatorze dostarczanym z C::B), mają większą objętość niż z MSVC. Wynika to także z konieczności wczytywania bibliotek zapewniających warstwę kompatybilności (np. dla wersji z Cygwin...).
PS. Po wykonaniu operacji na poziomie kompilatora, masz jeszcze możliwość wykonania kompresji programu do wykonania specjalizowanymi narzędziami. Np. UPX: https://upx.github.io/