Visual Studio has better i386 code generation and the debugging tools tend to be better than GDB on Windows. GCC compiles a lot faster and has better x86-64 code generation. We recommend using MinGW GCC to build binaries for distribution to ensure they behave more like standard MAME releases.

If you're planning to release binaries, we recommend you build using the same flags we use for binary releases. You can see the options used in build-release.bat in the build repository. Currently the they are (the only difference: difference between the lines is the PTR64 setting):

Code
make TARGET=mame TOOLS=1 SEPARATE_BIN=1 PTR64=0 OPTIMIZE=3 SYMBOLS=1 SYMLEVEL=1 REGENIE=1 -j9
make TARGET=mame TOOLS=1 SEPARATE_BIN=1 PTR64=1 OPTIMIZE=3 SYMBOLS=1 SYMLEVEL=1 REGENIE=1 -j9

If you're building with a subset of drivers, do something like:

Code
make TARGET=mame SUBTARGET=subset SOURCES=src/mame/drivers/mydriver.cpp TOOLS=1 SEPARATE_BIN=1 PTR64=0 OPTIMIZE=3 SYMBOLS=1 SYMLEVEL=1 REGENIE=1 -j9
make TARGET=mame SUBTARGET=subset SOURCES=src/mame/drivers/mydriver.cpp TOOLS=1 SEPARATE_BIN=1 PTR64=1 OPTIMIZE=3 SYMBOLS=1 SYMLEVEL=1 REGENIE=1 -j9

(Note that you can't actually run the two commands in direct succession on Windows - you need to switch environments between doing 32-bit and 64-bit builds.)