Are the variable sizes compiler dependent ?
Да, это зависит от компилятора, но это не означает, что архитектурная точка зрения не имеет значения. Кроме того, от архитектуры зависит, является ли она 16/32/64
битной системой, например, для 16-bit
машин, sizeof (int)
равна 2
байтов, для 32-bit
машин она составляет 4
байтов.
Считалось, что int
- это собственный размер процессора, то есть размер регистра.
Здесь в аргументе функции arr[]
- это указатель, а не массив.
Итак, если система 32
битная система, тогда
sizeof(arr)/sizeof(arr[0]);
приведет к 1
как 4/4 = 1
.
Я нахожу комментарии @Eric очень верными и интересными относительно роли компилятора и архитектуры в определении размера переменной.
Размеры типов в конечном итоге определяются реализацией C
(особенно компилятор), а не архитектура или операционная система.
В то время как реализации C обычно находятся под сильным влиянием
архитектура, компьютеры фактически являются универсальными машинами Тьюринга, поэтому
что любой желаемый выбор размеров может быть реализован. С
реализации иногда выбирают размеры на основе соображений о том, что
должен поддерживаться исходный код, а не тот, который наиболее эффективен для
архитектура. Они могут даже поддерживать выбор размеров через
переключатели командной строки.