Microsoft linkers are defaulted to load code into ImageBase(default 0x4000000) + CodeBase(default 0x1000), and data immediately after it. So it is not one continuous block,but two sections ".text"(for code) and ".idata"(for static data). You can change CodeBase via ProjectSettings->Linker->Advance->BaseAddress, but Microsoft seems to think there are no reasons to meddle with the ImageBase so there are no options. If you wish to change that you have to generate the executable yourself and edit the PE header.
But why change it? Because you can? This is something I really don't understand.
While compiling c or c++ machine code for codes you write is not the only thing you get. Compiler inserts all sort of things for you like the standard library or os library and setup codes. In a console application generated by MSVC, instead of calling your main() directly, it calls something like _tmainCRTSetup() first to initialize static variable, call os functions like _GetCommandLineA as you see in your disassembly to put command line arguments in argc and argv, then call your main().
So the function _GetCommandLineA must be inserted into your exe:
ALIGN 16
_GetCommandLineA@0:; Function begin
ALIGN 16
.text: jmp near [imp_GetCommandLineA] ; 00405710 _ FF. 25, 0040A1DC(d)
; _GetCommandLineA@0 End of function
The actual GetCommandLineA is implemented in Kernel32.dll, so the address of that function is written in the address [imp_GetCommandLineA]
imp_GetCommandLineA: ; import from KERNEL32.dll
__imp__GetCommandLineA@0: ; byte
.idata$5: ; byte
db 0B4H, 0A3H, 00H, 00H ; 0040A1DC _ ....
"db 0B4H, 0A3H, 00H, 00H" is the address of that function. Since it is a function in a dll, it is probably some stub data and will be rewrite to the actual value once kernel32.dll is loaded.
When you call GetCommandLineA,the address "db 0B4H, 0A3H, 00H, 00H" is retrived by dereferencing the address imp_GetCommandLineA(0040A1DC(d)), and jumped to. as you can find in page 13 of http://www.agner.org/optimize/objconv-instructions.pdf , (d) means a direct address, sometimes you will get (rel) which means a offset from the current instruction address.
___DTOR_LIST__ seems to be something related with class destructors, c++ mode treats everything as c++, it doesn't care if your code is plain c. These are some MSVC implementation details I think you don't need to pay attention to. Normally when you disassemble c++ you only care about some certain functions, like write some stuff in main() and see how main() goes. The whole exe have a bunch of stuffs that are not worth your time.
Perhaps you should learn by looking at some win32 assembly tutorials and not by disassembling a c++ program. c++ is a real mess for starters.