Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/8: Рейтинг темы: голосов - 8, средняя оценка - 4.50
71 / 59 / 14
Регистрация: 20.12.2013
Сообщений: 732

Куча в DLL и EXE

09.02.2018, 01:16. Показов 1662. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Важно понимать, что единое адресное пространство состоит из одного исполняемого модуля и нескольких DLL-модулей. Одни из них могут быть скомпонованы со статически подключаемой библиотекой С/С++, другие — с DLL-версией той же библиотеки, а третьи (написанные нс на С/С++) вообще ею не пользуются Многие разработчики допускают ошибку, забывая, что в одном адресном пространстве может одновременно находиться несколько библиотек С/С++. Взгляните на этот код:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
VOID EXEFunc()
{
 
PVOID pv = DLLFunc();
 
// обращаемся к памяти, на которую указывает pv;
// предполагаем, что pv находится в С/С++-куче ЕХЕ-файла
 
free(pv);
 
}
 
PVOID DLLFunc()
{
 
// выделяем блок в С/С++-куче DLL return(malloc(100));
 
}
Ну и что Вы думаете? Будет ли этот код правильно работать? Освободит ли ЕХЕ-функция блок, выделенный DLL-функцией? Ответы на все вопросы одинаковы- может быть Для точных ответов информации слишком мало. Если оба модуля (EXE и DLL) скомпонованы с DLL-версией библиотеки С/С++, код будет работать совершенно нормально. По ссли хотя бы один из модулей связан со статической библиотекой С/С++, вызов free окажется неудачным. Я нс раз видел, как разработчики обжигались на подобном коде.
Что-то не понимаю - почему куча exe и dll разная, ведь адресное пространство процесса одно?
1
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.02.2018, 01:16
Ответы с готовыми решениями:

Переносимость программы, куча dll и кроссплатформенность
Решил пощупать С++ и Qt после C#. Создал простейшее консольное приложение и оконное Qt. В итоге, что бы приложение открылось вне IDE...

Dll файл в exe файле. Вшить dll libcurl
Проблема такая что приходится таскать всегда libcurl.dll с собой. Надо все носить в одном exe. Enigma Virtual Box использовать нельзя,...

[C++] dll в exe
Как можно сделать так чтобы dll засунуть в exe программу чтоб при запуске она инжектилась в процесс hl.exe

3
║XLR8║
 Аватар для outoftime
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,360
Записей в блоге: 5
09.02.2018, 01:57
AndrSlav, ради експеримента, сделай 3 файла и назови 1.сpp 2.cpp 3.cpp.

1.cpp собери как статическую либу
2.сpp при линковке добавь либу 1 и собери как динамическую библиотеку
3.cpp загрузи либу 2 и посмотри что выйдет
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,818
09.02.2018, 08:34
Цитата Сообщение от AndrSlav Посмотреть сообщение
хотя бы один из модулей связан со статической библиотекой С/С++
Здесь имеется в виду статически связанный runtime c++. Когда в dll свой статический runtime (и, следовательно, свой менеджер кучи), а в exe - свой. В этом случае выделенная на стороне dll динамическая память будет неизвестна менеджеру кучи exe, и попытка освободить ее с его помощью скорее всего приведет к аварийному останову.

Причем я бы сказал, что сама по себе линковка dll со статической версией runtime не приводит к проблемам. К проблемам приводит факт передачи владения в exe выделенной памяти на строне dll или наоборот. Поэтому нормальные библиотеки, если отдают пользователю dll какую-то память, то предусматривают также функции ее освобождения, реализованные на их стороне.
1
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
09.02.2018, 11:11
Цитата Сообщение от AndrSlav Посмотреть сообщение
Что-то не понимаю - почему куча exe и dll разная, ведь адресное пространство процесса одно?
В переводе с авторского на человеческий - "Совместимость ABI в разных DLL-ках никто не обещал, если конечно обратное не написано в документации прямо. Даже если все DLL-ки написаны на одном языке".
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.02.2018, 11:11
Помогаю со студенческими работами здесь

Встроить dll в exe
Создал простое окно в WinAPI, однако у пользователей у которых не стоит вижуал студио, требует msvcp120.dll Можно её как-то встроить в...

Внедрение DLL в EXE
Здравствуйте, хочу написать свой объединитель exe и dll. Подскажите, как это можно сделать так, чтобы можно было при запуске использовать...

Dll и exe в одном файле
Здравствуйте! Можно ли добавить свою dll в файл exe так чтобы при компиляции получился один файл. И при переносе не надо было таскать...

Редактировании файла .DLL и .exe
Доброго времени суток дорогие форумчане! Прошу прощение если я ошибся разделом (перенесите пож.) :sorry: В общем нужно отредактировать...

Модули. Ассоциативный массив. (DLL, EXE)
Добрый день, нужна помощь в следующем задании: написать программу. программа состоит из двух модулей (не понимаю, как они...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача №1: при указании работ (справочник РаботыПоРемонтуСпецтехники),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru