Логин: Пароль:    Регистрация Всеми возможностями сайта можно пользоваться
только после авторизации.
   Забыли пароль?

Поиск
L



Статистика
u
Пользователи онлайн: нет
Гостей онлайн: 8
Всего онлайн: 8
Зарегистрировано юзеров: 7805
Комментариев на сайте: 681
Новый юзер: Аdult onlinе dating



Последние комментарии
c
Arthurneime прокомментировал "Урок 53 - Потоки в Delphi, (часть 1/3)":
[img]https://sun9-66.userapi.com/c857220/v857220344/115e0/ySGY2CstZbw.jpg[/img] [b]Секс и здоровье[/b] =!!= Секс и здоровье : причинно-следственная связь =!!= Понижение потенции: есть ли повод для паники? =!!= Половой акт: квинтэссенция чувств и жизненных сил =!!= Продление полового акта: забег на длинную дистанцию =!!= Продление эрекции: выше, больше, сильнее [b]Секс и здоровье мужчины: причинно-следственная связь [/b] В ходе многочисленных экспериментов ученые установили, что главной причиной ранней смертности мужчин (а средняя продолжительность жизни мужской части населения в России составляет всего 59 ле&#1090 является безответственное отношение к своему сексуальному здоровью. При первых сбоях в работе половой системы мужчины подвергаются стрессу, выходят из состояния психического равновесия. В 80% случаев сексуальная нереализованность выливается в тяжелые депрессивные состояния, неврозы, проявления неконтролируемой агрессии. Этому есть вполне логичное объяснение с точки зрения физиологии. Дело в том, что мужской гормон тестостерон, который является важнейшим фактором в работе сердца, почек, печени, нервной системы, способен вырабатываться лишь в процессе половой близости. Мужчина с пошатнувшимся сексуальным здоровьем часто начинает ощущать общее недомогание, становится раздражительным, несобранным, агрессивным и чрезмерно эмоциональным. А это уже прямо ведет к тому, что человеку не хватает сил для самореализации, которая для мужчин имеет приоритетное значение в жизни. [b]Получается очень мрачная картина, напоминающая замкнутый круг.[/b] Как выйти из него, как решить проблемы? На многие возникающие интимные вопросы вы сможете найти ответы посетив рекомендуемые ниже ресурсы. Источник: http://porntube24.online/2020/04/08/aletta-ocean-backstage-fucking-big-cock/ ================== [url=https://bit.ly/2KhYaIy]Знакомства 18+[/url] [url=https://bit.ly/2y2MVRE]Казино для Ценителей.[/url] [url=https://bit.ly/2KgSJcE]18+ Секс -чат[/url] https://www.youtube.com/watch?v=32ClBPbPuGE [youtube]wcgT7YcqPg0[/youtube]
EleoPhync прокомментировал "Урок 18 - Знакомство с компонентами (часть 9/13)":
Viagra Pas De La Case [url=https://buyciallisonline.com/#]Buy Cialis[/url] Kamagra Jelly Usa <a href=https://buyciallisonline.com/#>Buy Cialis</a> Acquistare Cialis Tadalafil

Урок 81 - Работа с памятью в системе Windows32 (часть 2/3)

Опишу базовые функции работы с памятью, которые доступны для программиста на Delphi. Включены описания как API-фукнций, так и Delphi-функций.
Delphi-функции

New(), Dispose()
Фунции работают с менеджером кучи Delphi. Обеспечивают типизированное выделение и освобождение памяти. Используются для динамической работы со структурами.
GetMem(), FreeMem()
Фунции работают с менеджером кучи Delphi. Обеспечивают нетипизированное выделение и освобождение памяти. Используются для динамической работы с небольшими бинарными блоками памяти (буфера, блоки).

API-функции
HeapCreate(), HeapDestroy(), ...
Функции работы со стандартным менеджером кучи Windows. Используются для создания и уничтожения куч, выделения и освобождения большого количества нетипизированных блоков памяти малого размера. Функции позволяют работать со стандартной кучей по умолчанию, которую создает операционная система для каждого процесса.
LocalAlloc(), LocalFree(), ... , GlobalAlloc(), GlobalFree(), ...
Так как в Windows 32 нет разделения на глобальные и локальные кучи, эти две группы функций идентичны. Функции работают со стандартной кучей по умолчанию, которую создает операционная система для каждого процесса. Функции морально устарели и Microsoft не рекомендует их использовать без крайней необходимости. Однако эти функции могут пригодиться, например, при работе с буфером обмена.
VirtualAlloc(), VirtualFree(), ...
"Основополагающие" функции выделения памяти в Windows. Используются как для резервирования адресного пространства, так и для выделения страниц реальной памяти в заранее зарезервированный участок адресного пространства. Позволяют выполнить обе фазы за один вызов функции. Используются для резервирования и выделения больших участков памяти.

Очень часто во многих программах встает проблема накопления потока поступающих данных. Например, это может быть запись звука, запись сигналов с датчиков, накопление данных с модема, коммуникационного порта, прием данных по сети и так далее. Если объем накапливаемых данных небольшой и заранее точно известен, то такая задача решается элементарно - под буфер выделяется блок памяти и эта память постепенно заполняется. Если же размер требуемого буфера достаточно большой, то выделение его полностью в самом начале может быть неэффективным - запись потока может прерваться гораздо раньше, а если же размер его неизвестен заранее, например когда запись данных останавливается по какому-либо внешнему сигналу, то встает проблема о выборе размера выделяемого блока.
В таких случаях используют динамические хранилища. В Delphi такими хранилищами являются динамические массивы, объект TMemoryStream, динамическое перераспределение памяти. Все эти хранилища работают на одном и том же принципе: под хранение данных выделяется блок памяти и поступающие данные последовательно записываются в этот блок, когда этот блок заполняется полностью, он перераспределяется с некоторым запасом (размер его увеличивается, а старые данные остаются). После того как каждый новый блок заполняется полностью он снова перераспределяется по мере поступления новых данных.
Перераспределение памяти занимает много ресурсов само по себе, а так как оно выполняется еще и в куче, то можно считать его вдвойне неэффективным, особенно если размеры перераспределяемых блоков становятся очень большими. Динамические массивы и динамическое перераспределение памяти используют менеджер кучи Delphi, а объект TMemoryStream использует стандартный менеджер кучи Windows.
Кроме того постоянное перераспределение участков памяти с разными размерами приводит к сильной дефрагментации памяти компьютера, что приводит к замедлению работы компьютера, а в конечном счете и к блокировке его работы.
Для решения проблемы накопления данных автором были разработаны два объекта накопления данных, основанные на двух разных принципах и имеющих разные характеристики.
TLinearStorage
Если размер буфера большой, но максимально возможный размер известен (например если есть ограничение на объем записываемых данных), то можно поступить следующим образом. В адресном пространстве процесса резервируется блок памяти необходимого размера, напомним, что такая операция не занимает ресурсов у системы. Затем по мере необходимости в этом зарезервированном участке памяти, по мере необходимости, последовательно выделяются страницы реальной памяти. Достоинством такого метода является линейное расположение ячеек в памяти друг за другом, то есть к такому хранилищу можно обращаться как к обычному линейному массиву. Недостатком - необходимость указания максимального размера.
TSectionStorage
Если размер буфера заранее неизвестен (ограничен лишь размером доступной реальной памяти), то предыдущее решение не подходит. В этом случае можно предложить другое решение. По мере необходимости, у системы можно запрашивать участки памяти одинакового размера и записывать в них поступающие данные. При этом буфер не будет иметь линейного адресного пространства, а будет состоять из одноразмерных "лоскутов" памяти - для вычислительного алгоритма такая организация буфера пожет стать серьезной помехой. Достоинством же такого решения является отсутствие необходимости изначально указывать какой либо размер буфера.
Если предполагается интенсивное увеличение-уменьшение хранилища, причем желательно, чтобы приращения были небольшими, то можно запрашивать память не у системы, а у стандартного менеджера кучи Windows, который создается для каждого хранилища отдельно. При этом, менеджер кучи выполняет роль кэша страниц памяти, увеличивая производительность.
Дополнительно, каждое хранилище имеет функции записи и чтения в стандартные потоки Delphi с упаковкой. Упаковка производится по стандартным алгоритмам библиотеки ZLIB.

TBaseStorage - базовый класс
Оба хранилища, которые будут рассматриваться в дальнейшем, основаны на одном абстрактом базовом классе и имеют схожие свойства и методы.

Item[] - получение указателя на указанный элемент по его индексу.
ItemSize - запрос размера хранимого элемента.
Count - запрос и установка числа хранимых элементов.


Удачи!
Встретимся в следующем уроке!


Источник: www.thedelphi.ru
Автор: Савельев Александр
Опубликовано: 23 Августа 2013
Просмотров:

Урок 80 - Работа с памятью в системе Windows32 (часть 1/3) Урок 82 - Работа с памятью в системе Windows32 (часть 3/3)

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