Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / new/delete и несколько рантаймов С++ / 10 сообщений из 10, страница 1 из 1
30.12.2015, 17:21
    #39140766
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
new/delete и несколько рантаймов С++
Есть EXE, который использует какой-то рантайм (msvcrt.dll)
В нем грузится моя DLL, которую я собрал в MSVC 2015 со статической линковкой (/MT) чтобы лишние DLL с собой не тащить.

Будут ли проблемы с выделением памяти, если я буду использовать new/delete или malloc()/free() в коде DLL ? Еще хочу немного STL задействовать (map, vector)

Это все внутри кода DLL, т.е. DLL сама выделила, сама освободила.
Нет такого что в DLL память выделилась, а в EXE освобождается и наоборот.

Засомневался, вроде должно быть все нормально, но вдруг что-то недопонимаю. Раньше эту DLL компилировал в MSVC6, поэтому использовалась та же msvcrt.dll поэтому проблемы не было.
...
Рейтинг: 0 / 0
30.12.2015, 18:34
    #39140809
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
new/delete и несколько рантаймов С++
Dima TЕсть EXE, который использует какой-то рантайм (msvcrt.dll)
В нем грузится моя DLL, которую я собрал в MSVC 2015 со статической линковкой (/MT) чтобы лишние DLL с собой не тащить.

Будут ли проблемы с выделением памяти, если я буду использовать new/delete или malloc()/free() в коде DLL ? Еще хочу немного STL задействовать (map, vector)


Нарушение ODR, будут, будут проблемы....


Dima TЭто все внутри кода DLL, т.е. DLL сама выделила, сама освободила.
Нет такого что в DLL память выделилась, а в EXE освобождается и наоборот.
Засомневался, вроде должно быть все нормально, но вдруг что-то недопонимаю. Раньше эту DLL компилировал в MSVC6, поэтому использовалась та же msvcrt.dll поэтому проблемы не было.

Ну, это немного лучше, но на самом деле в коде далеко не всегда удаётся 100% но отследить все выделения и удаления памяти.
Так что рискуешь.

Главное -- зачем ?
...
Рейтинг: 0 / 0
30.12.2015, 18:59
    #39140835
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
new/delete и несколько рантаймов С++
Dima T...т.е. DLL сама выделила, сама освободила.
Нет такого что в DLL память выделилась, а в EXE освобождается и наоборот...
IMHO & AFAIK

Все нормально.
...
Рейтинг: 0 / 0
30.12.2015, 19:02
    #39140836
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
new/delete и несколько рантаймов С++
MasterZivГлавное -- зачем ?
EXE это Visual FoxPro. Тут я никак не могу пересобрать EXE. Вариант собирать DLL в MS VC 6 возможен, но хочется большего :)

DLL это набор функций, которые я из фокса использую. В коде DLL восновном WinAPI и немного C/C++. Все однопоточно. Никаких третьих библиотек не используется (MFC, ATL и т.д.)
По сути это обертка над WinAPI т.к. из фокса что-то неудобно напрямую вызывать, что-то для ускорения.

MasterZivна самом деле в коде далеко не всегда удаётся 100% но отследить все выделения и удаления памяти.
Отследить дело десятое, этих выделений 2-3 штуки всего. Плюсом хочу некоторые велосипеды на STL переписать.

Главное чтобы каких-то конфликтов не возникло из-за этого. Немного потестил - работает. Как понимаю каждый рантайм делает VirtualAlloc() и живет каждый со своим куском памяти. Или все-таки могут пересечься?
...
Рейтинг: 0 / 0
31.12.2015, 14:14
    #39141078
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
new/delete и несколько рантаймов С++
EXE это Visual FoxPro. Тут я никак не могу пересобрать EXE. Вариант собирать DLL в MS VC 6 возможен, но хочется большего :)



тебе не надо пересобирать приложение, тебе надо собирать твою dll с тем же crt, что и приложение.


Главное чтобы каких-то конфликтов не возникло из-за этого. Немного потестил - работает. Как понимаю каждый рантайм делает VirtualAlloc() и живет каждый со своим куском памяти. Или все-таки могут пересечься?

не могут, естественно.

есть еще вариант другой, не использовать crt в dll вообще, использовать только свои функции и WIN API.
...
Рейтинг: 0 / 0
31.12.2015, 14:19
    #39141079
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
new/delete и несколько рантаймов С++
MasterZivтебе не надо пересобирать приложение, тебе надо собирать твою dll с тем же
crt, что и приложение.
Он же сказал, что не собирается выделять память в одном модуле, а освобождать в другом.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
31.12.2015, 14:43
    #39141089
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
new/delete и несколько рантаймов С++
Всем спасибо за ответы. Понял что должно работать.

Место не критичное. Если вдруг какие-то проблемы начнутся - всегда можно вернутся к старому рантайму.
...
Рейтинг: 0 / 0
01.01.2016, 15:23
    #39141245
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
new/delete и несколько рантаймов С++
Dima TВсем спасибо за ответы. Понял что должно работать.

Место не критичное. Если вдруг какие-то проблемы начнутся - всегда можно вернутся к старому рантайму.

оно не должно работать, оно может работать иногда.
...
Рейтинг: 0 / 0
01.01.2016, 15:31
    #39141246
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
new/delete и несколько рантаймов С++
MasterZivоно не должно работать
С какого перепугу?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
02.01.2016, 13:43
    #39141395
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
new/delete и несколько рантаймов С++
Dimitry Sibiryakov, присоединяюсь.

Писал DLL под FoxPro (2.6 dos/windows), MS Access, Oracle Forms, Adobe, Java и еще какой-то софт... только два раза пришлось с версией Runtime заворачиваться:
1) когда FLL (FoxPro 2.6 dos/windows) собирал, API от FoxPro 2.6 требовало MS Visual C 6.0 (не Visual Studio, а VC 6.0 на дискетах под Dos/Windows 3.1 ))) )
2) и когда использовал PRO*C из-под Oracle Forms (нужно было одну и ту-же сессию/connect использовать и в host приложении и в dll). Пришлось в Oracle Co. обращаться, что бы нужную версию PRO*C выслали.

Никаких проблем с не совместимостью runtime не наблюдал. Например связка Oracle Forms 6.0 (MS runtime) и DLL (Delphi/Borland C++ Builder) вполне себе в продакшене пару лет работала. Там и new/delete, и создание окон/форм и коннекты к БД. Потом была на MS VS переписана, что бы много-мегабайтный рантайм Borland'а из проекта убрать.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / new/delete и несколько рантаймов С++ / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]