Размер целого зависит от того, что?
Является ли размер переменной int в C зависимым от машины или компилятора?
Размер целого зависит от того, что?
Является ли размер переменной int в C зависимым от машины или компилятора?
Это зависит от реализации. Стандарт C требует только того, чтобы:
char
имеет не менее 8 битshort
имеет не менее 16 битint
имеет не менее 16 битlong
имеет не менее 32 битlong long
имеет не менее 64 бит (добавлено в 1999 году)В 16/32-битные дни стандартом де-факто было:
int
был "родным" целым размеромОднако 64-разрядные системы обычно не делали int
64 бит, что создавало бы неудобную ситуацию с тремя 64-битными типами и 32-разрядным типом. Некоторые компиляторы расширили long
до 64 бит.
Это зависит прежде всего от компилятора. Например, если у вас 64-разрядный процессор x86, вы можете использовать старый 16-разрядный компилятор и получить 16-битные ints, 32-битный компилятор и получить 32-битные ints или 64-разрядный компилятор и получить 64 -битные ints.
Это зависит от процессора в той степени, в которой компилятор нацеливается на конкретный процессор, и (например) древний 16-разрядный процессор просто не будет запускать код, ориентированный на новый 64-разрядный процессор.
Стандарты C и С++ гарантируют минимальный размер (косвенно, указывая минимальные поддерживаемые диапазоны):
char: 8 bits
short: 16 bits
long: 32 bits
long long: 64 bits
Также гарантируется, что размеры/диапазоны строго неубывающие в следующем порядке: char, short, int, long и long long 1.
1 long long указан в C99 и С++ 0x, но некоторые компиляторы (например, gcc, Intel, Comeau) разрешают его также в коде С++ 03. Если вы хотите, вы можете убедить большинство (если не всех) отклонить long long
в коде С++ 03.
Формально представления всех основных типов данных (включая их размеры) зависят от компилятора и зависят только от компилятора. Компилятор (или, вернее, реализация) может служить слоем абстракции между программой и машиной, полностью скрывая машину от программы или искажая ее каким-либо образом.
Но на практике компиляторы предназначены для генерации наиболее эффективного кода для данной машины и/или ОС. Чтобы добиться того, что фундаментальные типы данных должны иметь естественное представление для данной машины и/или ОС. В этом смысле эти представления косвенно зависят от машины и/или ОС.
Другими словами, с абстрактной, формальной и педантичной точки зрения компилятор может полностью игнорировать представления типа данных, характерные для машины. Но это не имеет практического смысла. На практике компиляторы в полной мере используют представления типов данных, предоставляемые машиной.
Тем не менее, если какой-либо тип данных не поддерживается машиной, компилятор может предоставить этот тип данных программам, реализуя его поддержку на уровне компилятора ( "имитируя" ). Например, 64-разрядные целые типы обычно доступны в 32-битных компиляторах для 32-разрядных машин, хотя они не поддерживаются непосредственно машиной. В тот же день компиляторы часто предоставляли поддержку на уровне компилятора типов с плавающей точкой для машин, которые не были оснащены процессором с плавающей запятой (и поэтому не поддерживали типы с плавающей запятой напрямую).
AFAIK, размер типов данных зависит от реализации. Это означает, что он полностью зависит от исполнителя (т.е. Парня, пишущего компилятор), чтобы выбрать, каким он будет.
Итак, короче, это зависит от компилятора. Но часто проще просто использовать любой размер, который проще всего сопоставить с размером слова лежащей в основе машины - поэтому компилятор часто использует размер, который лучше всего подходит для базовой машины.
Как сказал MAK, это зависит от реализации. Это означает, что это зависит от компилятора. Как правило, компилятор нацеливается на одну машину, поэтому вы также можете считать ее зависимой от машины.
Это зависит как от архитектуры (машины, исполняемого типа), так и от компилятора. C и С++ гарантируют определенные минимумы. (Я думаю, что это char: 8 бит, int: 16 бит, long: 32 бит)
C99 включает некоторые известные типы ширины, такие как uint32_t (по возможности). См. stdint.h
Обновление: адресация Конрада Майера.
Это зависит от рабочей среды независимо от того, какое оборудование у вас есть. Если вы используете 16-битную ОС, такую как DOS, тогда она будет 2 байта. В 32-разрядной ОС, такой как Windows или Unix, это 4 байта и так далее. Даже если вы запускаете 32-разрядную ОС на 64-битном процессоре, размер будет всего 4 байта. Надеюсь, это поможет.
Размер переменной Integer зависит от типа компилятора:
если у вас есть 16-битный компилятор:
size of int is 2 bytes
char holds 1 byte
float occupies 4 bytes
если у вас есть 32-битный компилятор:
размер каждой переменной в два раза меньше ее размера в 16-битном компиляторе
int hold 4 bytes
char holds 2 bytes
float holds 8 bytes
То же самое происходит, если у вас есть 64-битный компилятор и т.д.