Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
3 семестр, WinAPI, MFC.pdf
Скачиваний:
370
Добавлен:
15.06.2014
Размер:
6.17 Mб
Скачать

8. .idata – таблица импортируемых имен

9. .CRT – неизменяемые данные стандартной библиотеки С

10. .reloc – настроечная информация – таблица переадресации (fixup table) 11. .debug – отладочная информация

12. .tls – локальная память потока

Можно создать свои разделы в ЕХЕили DLL-файле, используя директиву компилятора:

#pragma data_seg("segname")

Например, в файле MODULE.C есть такие строки:

#pragma data_seg("Shared") LONG g_lModuleUsage =0; #pragnia data_seg()

Обрабатывая этот код, компилятор создаст раздел Shared и поместит в него все инициализированные переменные, встретившиеся после директивы #pragma. В нашем примере в разделе Shared находится переменная g_lModuleUsage. Директива #pragma data_seg() сообщает компилятору, что следующие за ней переменные нужно вновь помещать в стандартный раздел данных, а не в Shared.

Важно помнить, что компилятор помещает в новый раздел только

инициализированные переменные; неинициализированные всегда включаются в раздел .bss. И если бы в предыдущем фрагменте не было указано каких-нибудь

инициализированных переменных, компилятор разместил бы все переменные в .bss: #pragma data_seg("Shared")

LONG g_lModuleUsage; #pragma data_seg()

Чаще всего переменные помещают в отдельные разделы, чтобы “разделить” их между несколькими проекциями ЕХЕ или DLL. По умолчанию каждая проекция получает свой набор переменных. Но можно сгруппировать в отдельном разделе переменные, которые должны быть доступны всем проекциям ЕХЕ или DLL; тогда система не станет создавать новые экземпляры этих переменных для каждой новой проекции ЕХЕ или DLL.

Чтобы переменные стали разделяемыми, надо сообщить компоновщику, что переменные в это разделе должны быть общими. Для этого предназначен ключ /SECTION

компоновщика: /SECTION: имя, атрибуты

За двоеточием укажите имя раздела, атрибуты которого Вы хотите изменить.

Контрольные вопросы

1.В чем суть динамически подключаемой библиотеки? Что в ней содержится?

2.При создании DLL, что нужно указать компоновщику?