Jump to content

    
ARV

Обработка потока данных - как реализуется концептуально?

Recommended Posts

В любой операционной системе системные вызовы дорогая по времени операция.
Потому и делают буферизацию в user space.

4 hours ago, ARV said:

Вот недавно я выяснил, что современные версии винды (семерка и новее) для DLL выделяют свою память данных (раньше данные выделялись в сегменте данных главного приложения), поэтому просто так взять, и передать указатель на данные DLL нельзя,

Если речь о передаче указателя между оазными процессами - этого недьзя было делать и раньше (с оговоркаи и некоторыми спц условиями можно).
А вообще ни одного слова в процитированном не понял и не могу первести на язык используемый при программировании.

Share this post


Link to post
Share on other sites
6 минут назад, GenaSPB сказал:

ни одного слова в процитированном не понял

Раньше было так: исполняемый код DLL грузился в память 1 раз при первом обращении к системной функции загрузки DLL, а затем при каждом следующем вызове этой функции просто увеличивался счетчик загрузок, а код оставался в одном экземпляре. А область данных для нужд DLL выделялась в области вызывающего приложения, т.е. для каждой загрузки DLL получала память основного приложения. Разные приложения могли загружать одну и ту же DLL, и при этом код DLL был для них в одном экземпляре, а данные DLL - разные. Поэтому какая-то экспортируемая функция DLL могла вернуть указатель на данные, и основная программа могла с данными по этому указателю работать, как будто это её собственные данные.

Сейчас и код, и данные при каждой "загрузке" DLL изолируются от памяти основного приложения, и никакие указатели без особых ухищрений передать из DLL в основной код нельзя. Так понятно объяснил?

Share this post


Link to post
Share on other sites
7 часов назад, ARV сказал:

DLL получала память основного приложения. Разные приложения могли загружать одну и ту же DLL, и при этом код DLL был для них в одном экземпляре, а данные DLL - разные.

Под 32-битную WinXP нет никаких проблем создать shared-секцию данных DLL, которая будет общей для всех экземпляров DLL, отображённых на память разных процессов. При этом и к памяти процесса DLL тоже имеет доступ.

Под Win7 не писал DLL, но сомневаюсь что там что-то кардинально изменилось.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.