Полезно за вас: Речник | Игри | Новини | Фирми | Рецепти | Обяви
Начало на реферати

Управление на паметта в 32 разрядна среда


Информационни технологии | 2009-12-04 | 37 сваляния

30. Управление на паметта в 32 разрядна среда. Сравнение на Windows95 и WindowsNT: използване на адресните пространства; глобалните данни; Heap и функции за работа с него (GlobalAlloc(), HeapAlloc()); използване на указатели или handle. Големи и малки динамични блокове и средства за менажирането им.


31. Memory-mapped файлове като средство за пестене на ОП и създаване на общи блокове. Избягване на фрагментацията при често алокиране на памет, пестене на пространство от swap файла при работа с инициализирани данни.


Memory mapped file средство за оптимално управление на паметта. Състой се от с асоцииране на файла или част от файл с ОП. Файла или част от файл се асоциира с виртуалното адресно пространство и тогава над него могат да се правят определени операции без да се качва.

HANDLE hFile=::CreateFile(...)//създаваме Handle

HANDLE hMap=::CreateFileMapping(hFile,...);

LPVOID IpvFile=::MapViewoffile(hMap,...);//мапва целия файл

DWORD dwFilesize=::GetFileSize(hFile,...)//използваме файл

::UnmapViewofFile(IpvFile);

::CloseHandle(hMap);

::CloseHandle(hFile);


Два процеса могат да ползват общ hMap т.е. те имат обща памет:

GlobalAlloc(...,GMEM_SHARED...);

В Win32 не прави shared блок, както в Win16. Обща памет, но не общ файл както по горе без CreateFile(...) и с подаване на параметри 0хFFFFFFFF вместо hFile.


GlobalAlloc е наследена в Win16. Тук в 32 битовата среда всъщност не действа , но може да се запише.

Съвет при работа с динамична памет:

- хипът се фрагментира при продължителна работа. Решението е по често да се унищожава и да се създава нов или да се прекомпонира.

- викайте heapmin в NT за освобождаване на големи блокове

- не викайте HeapFree за малки блокове заделени с new.

- стекът вече не е ограничен до 64К и става толкова голям, колкото е необходимо.


Как да пестим пространство от swap файла?

- EXE и DLL файлове не са в swap file те се включват във виртуалното адресно пространство на всеки процес. Добре е и константните данни по някакъв начин да се прикачат към тях, за да не попадат в swap file.


Низове

Ако те са непроменяеми за цялото изпълнение , декларирайте const charmystr[]=my string;

Низът се съхранява заедно с кода в секцията за инициализирани константни данни . тя се съхранява заедно с EXE файла.

В тази секция не можем да слагаме само С++ обекти, създадени чрез конструктор. Например:

const Crect my_rect(0,0,100,100); се поставя в .bss, който се вкарва в swap file и всеки процес има копие на този обект. По лошо е:

const CString my_str(new instance); което води до :

  1. поставяне на CString обект в .bss секцията

  2. масивът от символите в .data (иниц. неконст. данни )

  3. заемане памет за копие на символите за всеки стартиран процес.

Нищо не попада в EXE и всичко харчи памет.

Управление на паметта в 32 разрядна среда

Добави своя коментар:



Тагове от реферата: , , , , , , , , ,

Изтегли в DOC | PDF | ZIP

Подобни материали


Паралелен интерфейс в PC. LPT порт. Стандарт IEEE1284 Информационни технологии | 2010-11-14 | 72 прочитания
Команди в Pascal Информационни технологии | 2010-11-14 | 130 прочитания
Мощни графични редактори Информационни технологии | 2010-11-14 | 77 прочитания
Преговаряне Информационни технологии | 2010-11-14 | 66 прочитания
Речник - PC термини Информационни технологии | 2010-11-14 | 104 прочитания
Разработка на WEB базирана информационна система за управление и координация на туроператорски услуги Информационни технологии | 2010-11-14 | 50 прочитания
Класификация на компютърните мрежи.Видове мрежи според обхвата Информационни технологии | 2010-11-14 | 202 прочитания
Текстообработване Информационни технологии | 2010-11-14 | 41 прочитания
Секретност и автентичност в мрежите Информационни технологии | 2010-11-14 | 38 прочитания
Устройства и системи за магнитен запис и четене на информация Информационни технологии | 2010-11-14 | 179 прочитания