Russian Qt Forum

Программирование => С/C++ => Тема начата: Racot от Ноябрь 25, 2012, 11:17



Название: В чем отличия разработки приложения 32-x и 64x?
Отправлено: Racot от Ноябрь 25, 2012, 11:17
Попытался погуглить и не нашел ничего стоящего. Если есть интересные ссылки - прошу в студию!


Название: Re: В чем отличия разработки приложения 32-x и 64x?
Отправлено: ssoft от Ноябрь 26, 2012, 09:10
По моему, нет каких-то различий в разработке.
Есть проблемы совместимости и портирования из-за разной байтовой длины int и указателей.


Название: Re: В чем отличия разработки приложения 32-x и 64x?
Отправлено: xokc от Ноябрь 26, 2012, 13:11
Ну особенности-то есть, но прямо скажем несущественные. А читать можно тут:
http://habrahabr.ru/company/intel/blog/93831/
http://www.viva64.com/ru/l/



Название: Re: В чем отличия разработки приложения 32-x и 64x?
Отправлено: Igors от Ноябрь 26, 2012, 14:13
Есть проблемы совместимости и портирования из-за разной байтовой длины int и указателей.
int везде 4 байта. А вот long на OSX 4 байта в 32-бит но 8 байт в 64-бит.

Возвращаясь к вопросу, если программирование сводится к "использованию Qt" - то никаких проблем по существу нет, ну может вылезет что-то, залатаете, теоретическая подготовка необязательна. Под удар портирования попадает низкоуровневый код, обычно старый, напр
Код
C++ (Qt)
write(&myStruct, sizeof(myStruct));
// или
char * mark = (char *)((int)  data & ~1);
// и.т.п.
 
О таких художествах придется горько пожалеть


Название: Re: В чем отличия разработки приложения 32-x и 64x?
Отправлено: xokc от Ноябрь 26, 2012, 17:01
Код
C++ (Qt)
write(&myStruct, sizeof(myStruct));
 
О таких художествах придется горько пожалеть
А что не так с этим кодом с точки зрения 64 битной программы?


Название: Re: В чем отличия разработки приложения 32-x и 64x?
Отправлено: Igors от Ноябрь 26, 2012, 19:32
А что не так с этим кодом с точки зрения 64 битной программы?
Формально все так, но вероятность иметь уже др sizeof в 64 битах велика. И если нужно читать старые данные (а обычно да) - тогда "ой"


Название: Re: В чем отличия разработки приложения 32-x и 64x?
Отправлено: Anchorite от Ноябрь 27, 2012, 09:47
int везде 4 байта. А вот long на OSX 4 байта в 32-бит но 8 байт в 64-бит.

В пункте 3.9.1.2 Стандарта сказано следующее:

Цитировать
There are four signed integer types: “signed char”, “short int”, “int”, and “long int.”
In this list, each type provides at least as much storage as those preceding it in the list.
Plain ints have the natural size suggested by the architecture of the execution environment;
the other signed integer types are provided to meet special needs.



в пункте 5.3.1 сказано

Цитировать
The sizeof operator yields the number of bytes in the object representation of its operand.
The operand is either an expression, which is not evaluated, or a parenthesized type-id.
The sizeof operator shall not be applied to an expression that has function or incomplete type,
or to an enumeration type before all its enumerators have been declared,
or to the parenthesized name of such types, or to an lvalue that designates a bit-field.
sizeof(char), sizeof(signed char) and sizeof(unsigned char) are 1;
the result of sizeof applied to any other fundamental type (3.9.1) is implementation-defined.
[Note: in particular, sizeof(bool) and sizeof(wchar_t) are implementation-defined]
[Note: See 1.7 for the definition of byte and 3.9 for the definition of object representation. ]

Поэтому правильнее будет сказать - "int, обычно, 4 байта"