пятница, 9 апреля 2010 г.

sizeof char и другие сложности с типами

Составил таблицу с размерами типов в различных компиляторах и операционных системах (32- и 64-битных). Это полезно знать, чтобы учитывать при проектировании переносимых решений. Также полезно знать, что лучше использовать типы фиксированной длины. В новых версиях стандарта (начиная с C++11) для этого имеется файл stdint.h. Аналогичный файл существует и для языка C. Для более старых версий можно использовать pstdint.h. А использование в интерфейсах модулей знаковых типов фиксированной длины, позволяет относительно легко стыковаться с модулями на других языках, которые написаны в соответствии с Common Language Specification.

ТипMSVC++
32-bit
MSVC++
64-bit
gcc++ 4.4.1
32-bit
gcc++ 4.7.2
64-bit
char1111
short2222
int4444
long4448
size_t4848
wchar_t2244
long long8888
time_t18848

1) В версии MSVC++ старше 2005 time_t был определен как long int (32 bits) и поэтому не мог использоваться для дат позднее 19 января 2038 3:14:07 UTC. Начиная с Visual C++ 2005 time_t стал эквивалентен __time64_t по умолчанию, но это поведение можно изменить определив _USE_32BIT_TIME_T (тогда time_t будет определен как __time32_t). В таблице показан размер time_t по умолчанию.

Комментировать в ВКонтакте