Прежде всего, это зависит от компилятора. Компилятор, в свою очередь, обычно зависит от архитектуры, процессора, среды разработки и т. Д., Поскольку учитывает их. Так что вы можете сказать, что это комбинация всего. Но я бы НЕ сказал этого. Я бы сказал, Compiler , поскольку на одной и той же машине у вас могут быть разные размеры POD и встроенных типов, если вы используете разные компиляторы. Также обратите внимание, что ваш исходный код вводится в компилятор, поэтому именно этот компилятор принимает окончательное решение о размерах POD и встроенных типов. Однако верно и то, что на это решение влияет базовая архитектура целевой машины. В конце концов, настоящий полезный компилятор должен испускать эффективный код, который в конечном итоге выполняется на целевой машине.
Компиляторы также предоставляют options
. Немногие из них могут повлиять на размеры!
РЕДАКТИРОВАТЬ: Что говорят стандарты,
Размер char
, signed char
и unsigned char
определяется самим C ++ Standard! Размеры всех других типов определяются компилятором.
C ++ 03 Standard $ 5.3.3 / 1 говорит,
sizeof (char), sizeof (подписанный char) и
sizeof (без знака) 1;
результат sizeof применяется к любой другой
Основной тип (3.9.1)
реализации. [Примечание: в
в частности, sizeof (bool) и
sizeof (wchar_t)
реализация defined.69)
C99 Standard ($ 6.5.3.4) также сам определяет размер char
, signed char
и unsigned char
равным 1, но оставляет размер других типов, определяемых компилятором!
EDIT:
Я нашел эту главу C ++ FAQ действительно хорошей. Вся глава. Это очень маленькая глава, хотя. : -)
http://www.parashift.com/c++-faq-lite/intrinsic-types.html
Также прочитайте комментарии ниже, есть несколько хороших аргументов!