компиляция в режиме amd64 (visual studio 2010) - PullRequest
1 голос
/ 12 августа 2011

ребята, я хочу скомпилировать собственное 64-битное приложение.Я правильно настроил VS, и он работает, но, очевидно, это кросс-компиляция, а не компиляция в собственном режиме amd64, поскольку моя программа по-прежнему зависает, если я пытаюсь выделить вектор с более чем 1 000 000 000.

Сейчас, мой вопрос, где я должен положить этот дополнительный «amd64» (как описано здесь http://msdn.microsoft.com/en-us/library/x4d2c09s%28VS.80%29.aspx). Я пробовал его в свойствах страниц> отладка> аргументы команды, но это не помогло.

Ои не будь груб со мной, я немного новичок в этой теме.

Заранее спасибо.

(Visual Studio 2010 Ultimate Edition для Windows 7 Professional.)

РЕДАКТИРОВАТЬ: к Бо

Я не знаю, поскольку я запускаю его в режиме выпуска, и я действительно получаю сообщение "... exe прекращено работать". Кроме того, я добавляю элементы с push back ион работает для 1 000 000 000 элементов, но не для 1 100 000 000.

EDIT2:

Спасибо за подсказки. Я на самом деле использую версии страниц 2010 года, я только что опубликовалнеправильная ссылка. Я также следовалинструкции на этих сайтах и, как я уже писал, он работает, пока я не использую более 4 ГБ оперативной памяти.Я попытался запустить 32-битное приложение, которое использует более 2 ГБ оперативной памяти, конечно, не сработало.Затем я выполнил инструкции на странице -> Я смог запустить это приложение с использованием 4 ГБ.Теперь я хотел выделить более 4 Гб -> Это не сработало.Почему я думаю, что это связано с компиляцией, так это то, что вы можете установить определенный флаг, который позволяет 32-битным приложениям использовать 4 ГБ, я подумал, что это именно то, что делает опция кросс-компиляции.-> сделать его «каким-то образом» совместимым с 32- и 64-разрядными.

EDIT3: у меня на win7 установлено 8 ГБ 64x

EDIT4: извините, что не комментирую отдельные сообщения, но если я нажмуНа «комментарии» ничего не происходит.Но я просто что-то перепутал.проблема с компилятором, вероятно, не проблема, так как я могу успешно выделить 2 вектора с одним размером 500 000 000, а другим с 700 000 000. У кого-нибудь еще есть подсказка, почему я не могу выделить вектор больше, чем4gb?

Ответы [ 3 ]

3 голосов
/ 12 августа 2011

Вероятно, это не зависание, а заполнение файла подкачки.

Если вы работаете в режиме отладки, среда выполнения заполнит массив специальным значением (помечая неинициализированные переменные). Это может занять некоторое время!


У меня нет проблем с запуском этой программы в режиме выпуска

#include <vector>
#include <iostream>

int main()
{
    std::vector<int>   v(2000000000);

    std::cout << v.size();

    return 0;
}

Запускается через пару секунд (с большой активностью файла подкачки) и печатает ожидаемый размер.

0 голосов
/ 12 августа 2011

Вы можете проверить, является ли ваше приложение 32 или 64-битным с помощью следующей команды:

$ dumpbin / headers myprogram.exe

В нем должна быть указана целевая архитектура в начале.

0 голосов
/ 12 августа 2011

Теперь мой вопрос: куда мне добавить этот дополнительный «amd64»

Прежде всего, вы ссылались на инструкции для VS 2005, а не 2010. Хотя это, вероятно, не имеет значения в этом случае, между VS 2005 и 2010 есть много различий, поэтому будьте осторожны и используйте правильную документацию. Это правильная ссылка .

«amd64» - это аргумент, который вы передаете vcvarsall.bat для инициализации среды для создания приложений x64 в сеансе командной строки. Он не передается в ваше приложение и не является настройкой проекта в IDE. Абзац и таблица в «Vcvarsall.bat» в ссылке объясняют это. Ссылка, размещенная Лириком в комментариях, объясняет, как правильно настроить ваш проект в IDE, но опять-таки это ссылка на VS 2005. Вы хотите использовать эту ссылку

Теперь, что касается вашей ошибки, то, используете ли вы кросс-компилятор или нативный, почти наверняка не имеет к этому никакого отношения. Это целый отдельный вопрос.

...