Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.02.2014, 01:35   #1
vasiatka
Пользователь
 
Аватар для vasiatka
 
Регистрация: 18.02.2014
Сообщений: 90
По умолчанию Режимы компиляции Многопоточный MT и Многопоточный DLL

В MS visual studio в свойствах проекта можно выбрать режим компиляции:
Многопоточный MT или Многопоточный DLL.

На сколько я понимаю первый включает все функции из библиотек в исполняемый файл, а второй соответственно подключает dll при работе программы. Правильно ли я понимаю?

Теперь вопрос. При попытке выделить память превышающую 1Гб в программе скомпилированной как Многопоточная DLL происходит ошибка.
Если тот же код откомпилировать как Многопоточный MT, то все работает отлично.

Такое поведение связано с ограничениями dll? Если кто знает, пожалуйста объясните.
В бинарной системе счет ведут не по пальцам, а по кулакам.
Пенза - мой город - я из Пензы.
vasiatka вне форума Ответить с цитированием
Старый 20.02.2014, 03:28   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

понимаете верно.

думаю связано с фрагментацией адресного пространства изза еще одной длл.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 20.02.2014, 12:17   #3
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от vasiatka Посмотреть сообщение
В MS visual studio в свойствах проекта можно выбрать режим компиляции:
Многопоточный MT или Многопоточный DLL.

На сколько я понимаю первый включает все функции из библиотек в исполняемый файл, а второй соответственно подключает dll при работе программы. Правильно ли я понимаю?
Нет не правильно. Эти ключи никак не влияют на "все функции из библиотек". Они влияют исключительно на так называемую "библиотеку рантайма с++"


------------------------------



Несмотря на то, что эти ключи относятся к последующей линковке, они используются именно компилятором, а не линковщиком.


/MD линковка будет происходить с библиотекой MSVCRT.LIB. Это означает, что ваша программа будет работать не со статической, а с динамической версией библиотеки Run-Time. Ее имя - MSVCRT.DLL, и находится она в каталоге SYSTEM (или SYSTEM32) WINDOWS.
(Библиотека Run-Time обычно прилинковывается к каждой программе. Без нее трудно обойтись. Она содержит код начальной загрузки, который выполняется до начала выполнения вашего кода, а также код функций, которые используются практически каждым приложением.)

/ML линковка будет происходить со статической однопоточной версией библиотеки Run-Time. Если у вас однопоточное приложение, рекомендуется использовать именно этот ключ, в этом случае быстродействие программы будет немного выше, чем с применением ключа /MT.

/MT линковка будет происходить со статической многопоточной версией библиотеки Run-Time. Если у вас многопоточное приложение, всегда используйте этот ключ во избежание многих проблем, например с выделением памяти и обработкой ошибок.
_Bers вне форума Ответить с цитированием
Старый 20.02.2014, 12:35   #4
vasiatka
Пользователь
 
Аватар для vasiatka
 
Регистрация: 18.02.2014
Сообщений: 90
По умолчанию

Спасибо за разъяснения.
А вопрос с памятью остался. Тут еще какая проблема. Приложение (консольное), реализует набор статистических тестов (например, NIST), объемы данных огромны. Например, при выполнении преобразоания Фурье требуется выделение массива от 1 Гб.
У меня возникла идея вынести многие вещи в dll. Такой подход позволит упростить процесс тестирования данных.
Однако факт того, что через dll не выделяется больше 1 Гб меня ввел в ступор. Почему нельзя? Или я чего не понимаю...
В бинарной системе счет ведут не по пальцам, а по кулакам.
Пенза - мой город - я из Пензы.
vasiatka вне форума Ответить с цитированием
Старый 20.02.2014, 14:28   #5
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Сообщение от vasiatka Посмотреть сообщение
Спасибо за разъяснения.
А вопрос с памятью остался. Тут еще какая проблема. Приложение (консольное), реализует набор статистических тестов (например, NIST), объемы данных огромны. Например, при выполнении преобразоания Фурье требуется выделение массива от 1 Гб.
У меня возникла идея вынести многие вещи в dll. Такой подход позволит упростить процесс тестирования данных.
Однако факт того, что через dll не выделяется больше 1 Гб меня ввел в ступор. Почему нельзя? Или я чего не понимаю...
да можно, только вот для выделения непрерывного куска памяти, этот кусок нужно иметь в адресном пространстве.
вам надо или использовать буфер(например файл, и грузить частями)
либо переходить на x64.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 20.02.2014, 19:56   #6
vasiatka
Пользователь
 
Аватар для vasiatka
 
Регистрация: 18.02.2014
Сообщений: 90
По умолчанию

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


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Асинхронный многопоточный сервер Strangers C# (си шарп) 0 27.01.2013 00:29
c#. Многопоточный сервер tiger Помощь студентам 1 13.09.2012 13:24
Многопоточный сервер FAiver Работа с сетью в Delphi 18 31.03.2008 08:51
многопоточный сервер мандарин Работа с сетью в Delphi 6 24.04.2007 07:22
Многопоточный Ping Квэнди Работа с сетью в Delphi 0 18.12.2006 15:01