Сбой std :: shared_ptr с MSVC на другом компьютере?

Компиляция и запуск следующей простой программы отлично работает на моем компьютере разработчика (Visual Studio 2015, 64-разрядная версия).

Запуск одного и того же кода на другом компьютере приводит к сбою в диалоговом окне ошибки Windows, даже если установлены x64-redistributables (msvcp140.dll):

#include <memory>
#include <iostream>

int main(int argc, char **argv) {
std::shared_ptr<int> test; // comment out to run on both machines

std::cout << "Done: " << std::endl;
}

Удаление строки с общим указателем заставляет его работать.

Любая идея, в чем проблема может быть здесь, или как отлаживать?

0

Решение

Я нашел проблему, на случай, если это кому-нибудь пригодится:

В средстве просмотра событий Windows я обнаружил причину сбоя: исключение было 0xc000001d или же illegal instruction, Очевидно, мой код был скомпилирован с использованием /arch:AVX флаг компиляции, приводящий к следующему коду для фрагмента выше:

int main(int argc, char **argv) {
00007FF749A816B0  sub         rsp,48h
00007FF749A816B4  mov         qword ptr [rsp+20h],0FFFFFFFFFFFFFFFEh
00007FF749A816BD  vpxor       xmm0,xmm0,xmm0
00007FF749A816C1  vmovdqu     xmmword ptr [test],xmm0
std::shared_ptr<int> test; // comment out to run on both machines

std::cout << "Done: " << std::endl;
00007FF749A816C7  lea         rdx,[string "Done: " (07FF749A86C70h)]
00007FF749A816CE  mov         rcx,qword ptr [__imp_std::cout (07FF749A8A0D8h)]
00007FF749A816D5  call        std::operator<<<std::char_traits<char> > (07FF749A8107Dh)
...

Как видите, из-за /arch:AVX vpxor а также vmovdqu были сгенерированы инструкции, которые не выполняются на слишком старых процессорах (например, на тех, которые я тестировал).

Решение состоит в том, чтобы иметь отдельные версии исполняемого файла (или отдельные пути через программу) с инструкциями AVX и без них для поддержки более старых процессоров.

0

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

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

По вопросам рекламы [email protected]