Системное программирование в среде Windows
Шрифт:
• Описание схемы UNIX "Aspen", подводящей прочный фундамент под модель LP64, доступно по адресу http://www.opengroup.org/public/tech/aspen/lp64_wp.htm.
• В статье "Migration Tips", доступной по адресувы найдете хорошие советы по переносу программ с 32-разрядных на 64-разрядные платформы, а также ряд полезных ссылок. Произведя поиск в Web, вы сможете найти дополнительную информацию и рекомендации.
Если вас интересуют общие вопросы архитектуры компьютеров, обратитесь к книге [16], являющейся стандартом в этой области. Информация, касающаяся процессоров Itanium, приводится в [44].
Обширная информация, касающаяся архитектур, основанных на 64-разрядном расширении, представлена на Web-сайтах
http://www.intel.com и http://www.amd.com/us-en
Упражнения
16.1. Предположим, что p1 и р2 — указатели, связанные соотношением p1 > р2, и вы хотите получить расстояние между двумя элементами, вычитая один указатель из другого. При каких условиях будет действительным выражение: (DWORD)p1 – (DWORD)р2? Следует ли заменить это выражение на (DWORD)(p1 – р2), если расстояние между элементами невелико? Подсказка. Примите во внимание свойства обеих комплементарных арифметик.
16.2. Избавьтесь от выдачи компилятором предупреждающих сообщений относительно 64-битовых переменных, если таковые выводятся, в других программах, например, sortBT (программа 5.1) и ThreeStage (программа 10.5), в которых интенсивно используются указатели.
16.3. Если у вас имеется доступ к системе Win64, протестируйте 64-разрядные программы. Убедитесь также, что компоновка программ в 32-разрядном режиме по-прежнему осуществляется корректно.
ПРИЛОЖЕНИЕ А
Использование примеров программ
На Web-сайте книги находится zip-архив, который содержит исходные тексты всех примеров программ, а также соответствующие заголовочные файлы, служебные функции, файлы проектов и исполняемые файлы. Ряд программ демонстрируют дополнительные возможности и предоставляют решения отдельных упражнений, однако на Web-сайте приведены решения не для всех упражнений и представлены не все из упоминающихся в книге альтернативных вариантов реализации программ.
• Все программы тестировались под управлением Windows 2000, XP и Server 2003 на самых различных системах, от лэптопов до серверов. В необходимых случаях тестирование осуществлялось под управлением Windows 9x, хотя многие программы — особенно те, которые предлагаются на более поздних этапах изложения материала — под управлением Windows 9x и даже NT 4.0 выполняться не будут.
• Сборка и выполнение программ осуществлялись как с включенными определениями UNICODE, так и без таковых. Под управлением Windows 9x будут работать лишь те программы, в которых возможность работы с символами в кодировке UNICODE не предусмотрена.
• В подавляющем большинстве случаев компиляция программ в интегрированной среде разработки Microsoft Visual C++ версий 7.0 и 6.0 не будет сопровождаться выдачей предупреждающих сообщений, если для критерия серьезности ошибок (warning level), которые должны сопровождаться выводом диагностических сообщений компилятора, установлено значение 3. Однако существуют некоторые незначительные исключения, например, вывод сообщения "Отсутствует оператор return в основной программе" ("no return from main program") в случае использования функции ExitProcess.
• Для проектов Microsoft Visual Studio .NET и Microsoft Visual Studio C++ 6.0 предусмотрены разные каталоги, каковыми являются каталоги Projects7 и Projects6. Соответствующие исполняемые файлы программ помещаются в каталоги run7 и run6.
• В программах широко применяются функции обобщенной библиотеки С, а также такие специфические для используемых типов компиляторов ключевые слова, как __try, __except или __leave. Начиная с главы 7, важную роль в программах играют многопоточная библиотека С времени
выполнения и функции _beginthreadex и _endthreadex.• Предоставляются как файлы проектов (в их окончательной (release), а не отладочной (debug) форме), так и make-файлы. Все проекты достаточно просты, характеризуются минимальным количеством зависимостей (dependencies) и их можно быстро создать заново в любой желаемой конфигурации с получением либо отладочной, либо окончательной версии.
• Проекты для построения всех программ, за исключением статических и динамических библиотек, ориентированы на создание консольных приложений.
Для сборки программ можно воспользоваться также такими инструментальными средствами, распространяемыми в рамках проекта программного обеспечения с открытым исходным кодом (GNU), как компиляторы gcc и g++, входящие в состав комплекта инструментов Gnu Compiler Collection . Читатели, заинтересованные в подобных средствах разработки, должны ознакомиться с действующим на условиях GNU проектом MinGW , который описывается как "совокупность свободно доступных и свободно распространяемых заголовочных файлов и библиотек импорта, специфических для Windows, объединенных с наборами инструментов GNU, что позволяет создавать программы для среды Windows, не зависящие от динамических библиотек С времени выполнения, выпускаемых третьими сторонами". В то же время, при тестировании большинства примеров программ, приведенных в книге, я эти средства не применял, но весьма успешно использовал возможности MinGW, и мне даже удавалось выполнять межплатформенную сборку для создания исполняемых программ и DLL-библиотек Windows в Linux-системах. Более того, я имел возможность убедиться в чрезвычайно высокой эффективности систем диагностики ошибок и вывода предупреждающих сообщений компиляторов gcc и g++ при разработке 64-разрядных программ.
Структура каталогов
Основной каталог носит название WindowsSmpEd3 (от Windows Sample Programs, Edition 3). Для каждой главы предусмотрен отдельный подкаталог. Все заголовочные файлы находятся в каталоге Include, а в каталоге Utilities содержатся такие часто используемые функции, как ReportError или PrintStrings. Готовые проекты помещены в каталоги Projects6 и Projects7 (для Visual C++ 6.0 и 7.0 соответственно). Исполняемые программы и библиотеки DLL для всех проектов хранятся в каталогах run6 и run7. В каталоге TimeTest содержатся файлы, которые требуются для тестирования производительности программ, описанного в приложении В. Прежде чем мы приступим к описанию содержимого отдельных подкаталогов WindowsSmpEd3, необходимо вкратце рассмотреть остальное содержимое Web-сайта.
Учебные пособия (слайды)
В каталоге Overheads содержатся слайды Power Point. Слайды включены для удобства преподавателей колледжей и университетов, которые захотят воспользоваться материалом книги в курсах своих лекций. Слайды не предназначены для коммерческого использования.
Каталог Utility
В каталог Utility включены семь файлов с исходными кодами служебных функций, которые требуются для примеров программ.
1. Файл ReprtErr.с содержит функции ReportError (программа 2.2) и ReportException (программа 4.1). За исключением программ grep и wc, а также программ, приведенных в главе 1, каждая из программ, запускаемых на выполнение как процесс программами из примеров, нуждается в этом файле.
2. Файл PrintMsg.c содержит функции PrintStrings, PrintMsg и ConsolePrint (программа 2.1). Так как эти функции вызываются функцией ReprtErr.с, то этот исходный файл также требуется почти во всех проектах.