Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
каркас.doc
Скачиваний:
58
Добавлен:
03.06.2015
Размер:
1.6 Mб
Скачать

1.3. Динамические библиотеки

Поскольку API содержит несколько сотен функций, можно предположить, что каждая программа для Windows должна связываться с большим количеством библиотек, и это может привести к дублированию большого объема кода. Однако это не так. Вместо обычных библиотек функции Windows API объединены в динамические библиотеки (Dynamic Link Library, DLL), доступ к которым может получить любая программа во время выполнения. В настоящем разделе Вы познакомитесь с тем, как работает динамическое связывание. Функции API Windows хранятся в перемещаемом формате в DLL. В процессе компиляции, когда программа вызывает функцию API, компоновщик не добавляет код этой функции к исполняемому модулю. Вместо него он добавляет только инструкции для загрузки функции, содержащие имя DLL, в которой находится функция, и ее имя. При выполнении программы все необходимые функции API также загру­жаются в память. Таким образом, при построении программы код функций API фактически не используется – он добавляется только тогда, когда программа загружается в память для выполнения.

Динамическое связывание имеет ряд важных преимуществ. Во-первых, посколь­ку практически все программы используют функции API, DLL сохраняет место на диске, не дублируя объектный код в выполняемых файлах. Во-вторых, дополнения и расширения Windows могут ограничиваться изменением программ в отдельных динамических библиотеках, и существующие приложения не будут нуждаться в перекомпиляции.

Приложения Windows могут использовать до 16 Гбайт виртуальной памяти! Более того, эти 16 Гбайт адресуются прямо, без переключения сегментов. В отличие от других операционных систем, которые используют сегментированную память, Windows рассматривает адресное пространство задачи как линейное. И поскольку она виртуализирует память, то каждое приложение может занять столько памяти, сколько (в разумной мере) пожелает. Так как прямая адресация более понятна программисту, она позволяет избежать опасности, связанной с использованием прежнего сегментного подхода.

Windows использует схему переключения задач с автовыгрузкой (preemptive multitasking), базируясь на временных квантах. Отработав некоторое время, задача в Windows автоматически выгружается системой и управление передается следую­щей задаче (если таковая имеется). Такая схема переключения является более предпочтительной, поскольку позволяет операционной системе полностью контро­лировать все задачи и предохраняет ее от блокирования одной задачей. Большинство программистов рассматривают схему переключения задач с автовыгрузкой как более прогрессивную.

1.4. Программное обеспечение для создания Win-приложений

Венгерская нотация. Если бы Вы руководили большой компанией типа Microsoft с тысячами программи­стов, работающими над различными проектами, вы бы непременно пришли к необходи­мости введения стандарта написания кода, в противном случае хаос был бы неизбежен, Так и была рождена спецификация написания кода в Microsoft. Её автор – человек по имени Чарльз Симони (Charles Simonyi). Все API, интерфейсы, технические статьи и прочее используют эти соглашения.

Обычно их называют венгерской нотацией. Почему? Вряд ли когда-нибудь мы точно узна­ем об этом, да это и неважно – сейчас перед нами другая цель: научиться читать код Microsoft.

Венгерская нотация состоит из ряда соглашений по именованию переменных, функ­ций, типов, констант, классов и параметров функций. В таблице 1.1 содержатся все префик­сы, используемые при этом именовании.

Таблица 1.1