@AntonHerzen

Несколько вопросов о С++?

Здравствуйте, начал только изучать C++, до этого имел дело только с интерпретируемыми языками и Java,но на ней комплировал только в jar да и кодил мало, поэтому возникло несколько вопросов:
1) Компиляция, как я понял, это приведение написанного кода в код на низком(или вообще машинном я так и не понял) языке?
2) Компиляция происходит под определённое железо, или под определённую OC и её битность?
3) Если под OC, то есть ли какая-то разница программе на C++ как я её скомпилируют? Или по большому счету нету, но есть так называемый "OC Layer" и если я буду использовать возможности Layer'a от винды, то после компиляции под линукс я получу ошибку либо при компиляции, либо при попытке запуска?
4) Есть ли программам на C\C++ и прочих языках высокого уровня разница на каком железе они запущены? То я так и не понял этого момента, и вроде как есть)
Заранее спасибо за ответы!
  • Вопрос задан
  • 138 просмотров
Решения вопроса 1
saboteur_kiev
@saboteur_kiev Куратор тега C++
software engineer
1. Компиляция - перевод текста в исполняемый код. Современная компиляция процесс сложный, сейчас он включает в себя и непосредственно трансляцию и линковку в конечный исполняемый файл (.exe, .com, *nix executable, и др). Да исполняемый файл это практически машинный код процессора.

2. Компиляция обычно идет под определенную платформу (грубо говоря процессор), но в Java, например, тоже есть JIT-компиляция под саму java-машину. Сейчас слишком много виртуализации, чтобы давать недвумысленные утверждения.

3. Программе есть разница. У компилятора могут быть разные опции оптимизации. А OC лейер делается лично вами - например для отрисовки окошек, вы можете использовать виндовые библиотеки, и понятное дело что они будут работать только под виндой. Или использовать какой-нить фреймворк кроссплатформенный, и тогда будет под теми платформами которые поддерживает фреймворк. Или мутите графику с нуля, ищете как это реализуется под каждую платформу. То есть на С++ вы можете писать в зависимости от ваших знаний платформ.

4. Разное железо предоставляет разные возможности, но вы должны уметь с ним работать. Если вы хотите использовать GPU (чипсет на видяшках) для майнинга, понятное дело что железо должно быть с таким GPU.
Если вы пишете простенькую прогу с использованием стандартных библиотек, разницы нет.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
GavriKos
@GavriKos
1 ) В целом - да. Более подробно вам пока не нужно
2) И то и другое. Компилируется под определенную архитектуру в исполняемый файл целевой ОС с использованием системных вызовов этой ОС
3) Программе есть разница, если она использует хоть что то системное. Либо можно использовать универсальные "прослойки" а-ля Qt, которые в зависимости от параметров компиляции подставят нужные вызовы. Т.е. консольный хеллоу ворд можно написать так, что скомпилится и под линь и под винду. Что то сложное - нужно учитывать нюансы или даже делать разные реализации.
4) Разница есть. На уровне написания программы - это размеры типов данных, особенности работы с памятью и все такое. На уровне выполнения - если программа скомпилирована не под тот проц - то она просто не заработает.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы