Qt Creator — calloc не работает с большой памятью

У меня проблема с Qt Creator или одним из его компонентов.

У меня есть программа, которая требует много памяти (около 4 ГБ), и я использую calloc для ее выделения. Если я скомпилирую код C с помощью mingw / gcc (без использования Qt-framework), он будет работать, но если я скомпилирую его в Qt Creator (с кодом C, встроенным в Qt-фреймворк с использованием C ++), используя набор инструментов mingw / gcc Calloc возвращает нулевой указатель.

Я уже искал и нашел вариант qt-pro QMAKE_LFLAGS += -Wl,--large-address-aware, который работал в некоторых случаях (около 3,5 ГБ), но если я перехожу выше 4 ГБ, он работает только с кодом C, скомпилированным с gcc, а не с Qt.

Как я могу выделить необходимый объем памяти, используя calloc при компиляции с Qt Creator?

4

Решение

Так что ваши cigwin Цепочка инструментов создает 64-битные приложения для вас. Возможный объем памяти, который может быть выделен 64-битным приложением, равен 264 байты, которые намного превышают 4 ГБ. Но Qt Creator (если вы установили его из QtSDK и не перенастроили его вручную), использует цепочку инструментов Qt, которая создает 32-битные приложения. Вы теоретически можете выделить 4 Гб памяти 32-битным приложением, но не забывайте, что все библиотеки также будут загружены в эту память. На практике вы можете выделить около 3 Гб памяти, а не в один непрерывный блок.

У вас есть 3 способа решить вашу проблему:

  • пересмотреть свой алгоритм. Не выделяйте 4 ГБ ОЗУ, не используйте более интеллектуальные структуры данных, не используйте дисковый кэш и т. Д. Я считаю, что если ваша проблема будет на самом деле требуют больше 4 ГБ памяти для решения, вы бы не задавали этот вопрос.

  • отделите ваш код Qt от вашей программы на Си. Затем вы все еще можете использовать 64-битный целевой компилятор для программы на Си и 32-битный целевой компилятор для части Qt / C ++. Вы можете общаться с вашей программой C через любой межпроцессного взаимодействия механизм. (На самом деле достаточно стандартных потоков ввода / вывода)

  • Перейти на 64 бит. Я имею в виду, использовать 64-битный целевой компилятор для кода как на C, так и на C ++. Но это не так просто, как можно подумать. Вам нужно будет перестроить Qt в 64-битном режиме. Это возможно, если некоторые модули отключены, а некоторые исправления кода (я пробовал один раз), но Windows 64 bit официально не поддерживается.

1

Другие решения

Других решений пока нет …