Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > К вопросу об аппаратной совместимости программ


Автор: Joe_Black 6.2.2008, 16:36
Привет!
Человек я на форуме новый, но тема эта, уверен, не обсуждалась.
Интересует вот что. Пусть будет написана какая-то программа на С++ по обработке битовых полей (может быть массивов их). Есть ли вероятность того, что она не будет работать на разных машинах по той причине, что разное железо может быть? Какое-то время назад такое было 100%. А вот что сейчас - не знаю. Может и нет такой проблемы больше? Может уже сошли с дистанции производители "нестандартного" оборудования?
Вопрос, наверняка поставлен не совсем корректно, но кто в курсе аппаратной несовместимости, тот надеюсь поймет о чем речь. Буду признателен за ваши отклики.
J.B.

Автор: Lazin 6.2.2008, 17:02
Ничего не изменилось))

Автор: MAKCim 6.2.2008, 17:34
Цитата(Joe_Black @  6.2.2008,  16:36 Найти цитируемый пост)
Интересует вот что. Пусть будет написана какая-то программа на С++ по обработке битовых полей (может быть массивов их). Есть ли вероятность того, что она не будет работать на разных машинах по той причине, что разное железо может быть?

если есть компилятор С++ под соответствующий тип архитектуры, то все будет работать как надо

Автор: Joe_Black 6.2.2008, 17:38
понял. Спасибо! Жаль конечно, что все осталось по-старому. ладно. будет стараться победить эту ситуацию
Тему считаю закрытой.

Автор: SaDFromSpb 7.2.2008, 13:31
Цитата(MAKCim @  6.2.2008,  17:34 Найти цитируемый пост)
если есть компилятор С++ под соответствующий тип архитектуры, то все будет работать как надо

Так С++ позволяет с "самым низом" - двоичным представлением данных работать, что на прямую с железом завязано. Компилятор тут уже побоку.
Вот я в частности столкнулся с проблемой little endian/ big endian когда-то. Передавал данные, между машинами с разной архитектурой.

Код

  int a = 4;

  char* ch = reinterpret_cast<char*>(&a);

  for (int i=0; i<sizeof(int); ++i)
    cout << static_cast<int>(ch[i]) << ' ';
  cout << endl;


На интеловской платформе выведется одно, а вот на спарке каком-нибудь совсем другое. 

Автор: MAKCim 7.2.2008, 14:41
SaDFromSpb, 
если напрямую использовать зависящие от архитектуры конструкции, то надо быть готовым к разному поведению
кода на этих архитектурах
Цитата(SaDFromSpb @  7.2.2008,  13:31 Найти цитируемый пост)
Так С++ позволяет с "самым низом" - двоичным представлением данных работать, что на прямую с железом завязано. Компилятор тут уже побоку.

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

Автор: SaDFromSpb 7.2.2008, 15:15
Цитата(MAKCim @  7.2.2008,  14:41 Найти цитируемый пост)
не вижу, где я не прав 

Ну вот про эти самые возникающие трудности не сказал. Мой пример в предыдущем посте с применением соответсвующего компилятора будет работать "как надо", только по-разному на разных платформах.  smile 
Да пофиг, тут уже понятно все вроде как....

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)