Составил таблицу с размерами типов в различных компиляторах и операционных системах (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 |
char | 1 | 1 | 1 | 1 |
short | 2 | 2 | 2 | 2 |
int | 4 | 4 | 4 | 4 |
long | 4 | 4 | 4 | 8 |
size_t | 4 | 8 | 4 | 8 |
wchar_t | 2 | 2 | 4 | 4 |
long long | 8 | 8 | 8 | 8 |
time_t1 | 8 | 8 | 4 | 8 |
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 по умолчанию.↩