Интересует вопрос, если сделать часть программы в виде DLL, уменьшиться ли размер её процесса в диспетчере задач? Погуглил и из прочитанного понял, что физически DLL одна, но в памяти каждый процесс используемый эту DLL будет показывать занятое виртуальное пространство с учётом этой DLL. Ну и мнение что она будет добавлена только к первому процессу, но для меня это показалось странно, что для какого то процесса будет иное определение. И в третьих, насколько я почитал про всякие стеки, про загрузку функции в стек из этого я делаю выводы, что функция будет ещё создавать копию в процессе её работы. Просто возник спор, многие определяют программу по критерию занимаемой памяти в диспетчере задач, это я слушал и в Linux и в Windows, но при сравнении некоторые программы написаны с использованием DLL, другие нет, можно ли их сравнивать в таком случае, если размер dll будет отображаться в другом процессе или в собственном адресном пространстве.
Является ли DLL адресным пространством EXE-файла?
Сообщений 1 страница 3 из 3
Поделиться204.08.2021 11:02:58
В винде загружается только одна копия в память. Но для каждого процесса память под переменные своя.
Поделиться309.08.2021 14:43:49
Но для каждого процесса память под переменные своя.
У меня тут связанный вопрос возник по памяти.
Допустим, есть некая dll используемая несколькими программами.
Расшарить память dll между программами (сделать общей) в этой dll можно, как я понял, так:
DataSection !section '.share' data readable writeable shareable SharedVariable: Data.i 0 !section '.data' Data readable writeable EndDataSection
И далее по указателю обращаться к SharedVariable.
Но задача стоит сделать не просто некоторую область, а динамический массив (изменяется через redim).
Вопрос, собственно, можно ли сделать такое в принципе? Будет ли расшарена память, выделяемая под сам массив?
Я, конечно, поэкспериментирую, но хотелось бы знать, возможно ли такое в принципе или придётся искать какой-то обходной путь?