|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
20.02.2014, 01:35 | #1 |
Пользователь
Регистрация: 18.02.2014
Сообщений: 90
|
Режимы компиляции Многопоточный MT и Многопоточный DLL
В MS visual studio в свойствах проекта можно выбрать режим компиляции:
Многопоточный MT или Многопоточный DLL. На сколько я понимаю первый включает все функции из библиотек в исполняемый файл, а второй соответственно подключает dll при работе программы. Правильно ли я понимаю? Теперь вопрос. При попытке выделить память превышающую 1Гб в программе скомпилированной как Многопоточная DLL происходит ошибка. Если тот же код откомпилировать как Многопоточный MT, то все работает отлично. Такое поведение связано с ограничениями dll? Если кто знает, пожалуйста объясните. |
20.02.2014, 03:28 | #2 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
понимаете верно.
думаю связано с фрагментацией адресного пространства изза еще одной длл. Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
20.02.2014, 12:17 | #3 | |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
Цитата:
------------------------------ Несмотря на то, что эти ключи относятся к последующей линковке, они используются именно компилятором, а не линковщиком. /MD линковка будет происходить с библиотекой MSVCRT.LIB. Это означает, что ваша программа будет работать не со статической, а с динамической версией библиотеки Run-Time. Ее имя - MSVCRT.DLL, и находится она в каталоге SYSTEM (или SYSTEM32) WINDOWS. (Библиотека Run-Time обычно прилинковывается к каждой программе. Без нее трудно обойтись. Она содержит код начальной загрузки, который выполняется до начала выполнения вашего кода, а также код функций, которые используются практически каждым приложением.) /ML линковка будет происходить со статической однопоточной версией библиотеки Run-Time. Если у вас однопоточное приложение, рекомендуется использовать именно этот ключ, в этом случае быстродействие программы будет немного выше, чем с применением ключа /MT. /MT линковка будет происходить со статической многопоточной версией библиотеки Run-Time. Если у вас многопоточное приложение, всегда используйте этот ключ во избежание многих проблем, например с выделением памяти и обработкой ошибок. |
|
20.02.2014, 12:35 | #4 |
Пользователь
Регистрация: 18.02.2014
Сообщений: 90
|
Спасибо за разъяснения.
А вопрос с памятью остался. Тут еще какая проблема. Приложение (консольное), реализует набор статистических тестов (например, NIST), объемы данных огромны. Например, при выполнении преобразоания Фурье требуется выделение массива от 1 Гб. У меня возникла идея вынести многие вещи в dll. Такой подход позволит упростить процесс тестирования данных. Однако факт того, что через dll не выделяется больше 1 Гб меня ввел в ступор. Почему нельзя? Или я чего не понимаю... |
20.02.2014, 14:28 | #5 | |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
Цитата:
вам надо или использовать буфер(например файл, и грузить частями) либо переходить на x64. Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
|
20.02.2014, 19:56 | #6 |
Пользователь
Регистрация: 18.02.2014
Сообщений: 90
|
Если все данные заливать в файл, то время работы тесто возрастет с недели до года или больше Весь смысл в том, чтобы не использовать для конкретной задачи диск.
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Асинхронный многопоточный сервер | 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 |