Если вам нужно итерации по queue
, вам нужно что-то большее, чем очередь. Точка стандартных контейнерных адаптеров - это минимальный интерфейс. Если вам нужно также выполнить итерацию, почему бы просто не использовать deque (или список)?
.exe файл (или эквивалентный на других платформах) содержит адрес 'точки входа'. В первом приближении ОС загружает соответствующие разделы.EXE файла в поршень, и затем переходит к точке входа.
, Поскольку другие сказали, эта точка входа не будет 'основной', но вместо этого будет частью библиотеки времени выполнения - это сделает вещи как инициализация статических объектов, установка argc/argv параметры, установка stdin/stdout/stderr, и т.д. Когда это сделало все это, это назовет Ваше основное () функцией. Когда основные выходы, время выполнения проходит analagous процесс пасования назад Вашего кода возврата к среде, вызов статических деструкторов, вызов _atexit стандартные программы, и т.д.
, Если у Вас есть инструменты MS (возможно, не бесплатные), тогда у Вас есть весь источник во время выполнения, и простой способ посмотреть на него состоит в том, чтобы поместить точку останова на закрывающую фигурную скобку Вашего основного () метод и одноэтапная спина во время выполнения.
main()
часть библиотеки C и не системная функция. Я не знаю для OS X или Linux, но Windows обычно запускает программу с WinMainCRTStartup()
. Этот символ init Ваш процесс, извлеките параметры командной строки и среду (argc, argv, end
) и вызовы main()
. Это также ответственно за вызов любого кода, который должен бежать main()
, как atexit()
.
Путем взгляда в файле Visual Studio, необходимо быть в состоянии найти, что реализация по умолчанию WinMainCRTStartup
видит то, что это делает.
можно также определить собственную функцию для захода в запуск, это сделано путем изменения "точки входа" в опциях компоновщика. Это часто - функция, которая не берет аргументов и возвращает пустоту.
До окон идет, функции точки входа:
void __cdecl mainCRTStartup( void ) {}
void __stdcall WinMainCRTStartup( void ) {}
BOOL __stdcall _DllMainCRTStartup(HINSTANCE hinstDLL,DWORD fdwReason,void* lpReserved) {}
единственная причина использовать это по нормальному main/WinMain/DllMain то, если Вы хотели пользоваться своей собственной библиотекой времени выполнения (Если Вы хотите меньший размер файла или пользовательские функции)
Для пользовательских реализаций времени выполнения и других приемов для получения меньших файлов PE, см.:
Опытный C++ / CLI (проверка вокруг страницы 279) имеет очень определенные детали различных сценариев начальной загрузки для собственного компонента, смешанных, и чистых блоков CLR.
Это зависимо от операционной системы. В OS X существует кадр в заголовке Маха, который содержит начальный адрес для EIP (указатель команд) регистр.
, Как только двоичный файл загружается, выполнение запусков ОС от этого адреса:
cristi:test diciu$ otool -l ./a.out | grep -A 10 LC_UNIXTHREAD cmd LC_UNIXTHREAD cmdsize 80 flavor i386_THREAD_STATE count i386_THREAD_STATE_COUNT [..] ss 0x00000000 eflags 0x00000000 eip 0x00001f8c cs 0x00000000 [..]
адрес является адресом функции "запуска" от двоичного файла:
cristi:test diciu$ nm ./a.out 0000200c D _NXArgc 00002008 D _NXArgv 00002000 D ___progname 00001fe0 t __dyld_func_lookup 00001000 A __mh_execute_header [..] 00001f8c T start
В Mac OS X, это - функция "запуска", которая вызвана первая, даже перед "основной" функцией:
(gdb) b start Breakpoint 1 at 0x1f90 (gdb) b main Breakpoint 2 at 0x1ff4 (gdb) r Starting program: /Users/diciu/Programming/test/a.out Reading symbols for shared libraries ++. done Breakpoint 1, 0x00001f90 in start ()
Если Вы интересуетесь книгой, связанной с Windows и попыткой API Win32
"Приложения программирования для Microsoft Windows" Jeffrey Richter.