программы С++ 11 работают на любом процессоре?

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

вопрос просто в следующем: предположим, я скомпилировал программу с функциями С++ 11 (используя VS2012 в Windows), есть ли гарантия, что эта программа будет работать на более старых процессорах? (например, Core 2 Duo, как и большинство ноутбуков)

В настоящее время я работаю с VS2010, но нашел библиотеки, которым нужны функции С++ 11. поэтому я хочу перенести всю работу на VS2012, но мои знания о том, как это будет работать, ограничены.

поправьте что-нибудь не так в вопросе

редактировать: еще 2 вопроса:

1 - могу ли я «смешивать» скомпилированную программу на С++ 11 со старой?

например, вызов функций, которые находятся внутри новой версии (.dll), из старой версии (.exe), поэтому я получил 2 файла:

1 скомпилирован с VS2010, другой 1 скомпилирован с VS2012, с DLL EXPORT они могут так работать?

2 - предложить лучшую среду, чем VS2012 для Windows


person Mohamed Sakr    schedule 12.05.2013    source источник
comment
Это не проблема языка. Это зависит от цели компилятора.   -  person stark    schedule 12.05.2013
comment
Прежде чем вы начнете размышлять, убедитесь, что в VS реализованы функции, которые вы портируете. VS немного более консервативен или, возможно, просто медленнее, чем другие, и еще не все доступно. См. это.   -  person ChiefTwoPencils    schedule 12.05.2013
comment
Большое спасибо за помощь, пожалуйста, проверьте редактирование :)   -  person Mohamed Sakr    schedule 12.05.2013
comment
Вопрос № 2 следует избегать. Вы будете получать только мнения.   -  person ChiefTwoPencils    schedule 12.05.2013


Ответы (3)


Пока архитектура, для которой создана цель, одинакова (x86 для 32-разрядных или amd64 для 64-разрядных), у вас не должно возникнуть никаких проблем.

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

person Jack    schedule 12.05.2013
comment
Хотя это специфично для C++11, в x86, конечно же, есть различия, о которых вам нужно знать. Например, cmov поддержка. - person icktoofay; 12.05.2013

Да, компилятору требуются дополнительные библиотеки для сборки программы. Но это не должно повлиять на возможность работы на старых процессорах. Единственный раз, когда это меняется, это когда вы пытаетесь запустить 64-битную программу на 32-битном процессоре.

Перенос на VS2012 прост: откройте решение в VS2012 и сохраните его как решение vs2012. Все должно быть хорошо.

Редактировать: есть вероятность, что если вы новичок в программировании, все ваши программы компилируются для 32-битных процессоров по умолчанию, если вы не кодируете, чтобы изменить это, поэтому вам не о чем беспокоиться. Вы можете запускать 32-битные программы на 64-битных процессорах, но не наоборот. Если вы действительно хотите ускорить процесс, вы можете создать программу, которая может работать на обоих процессорах;)

person Senjai    schedule 12.05.2013

учитывая скомпилированный исполняемый файл, обычные требования для его запуска:

  • АБИ
  • Платформа
  • библиотеки

и поскольку Windows является коммерческим продуктом, в зависимости от того, что вы делаете, вы можете добавить еще один фактор

  • Окружающая среда

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

В общем, VS не так уж хорош, конечно, это не лучший компилятор, который я когда-либо использовал, и в основном все, от GCC до Clang и MinGW, может легко заменить VS, но VS — это официальный компилятор и среда для Windows, так что это то, что вам нужно иметь дело с большей частью времени.

Если вы выполнили перечисленные требования, вы можете идти.

Кстати, Core 2 Duo не такой уж и старый, и актуальное поколение iCore тоже не сильно отличается.

person user2348816    schedule 12.05.2013