Размер целого или любых других типов данных в C зависит от базовой архитектуры?

#include<stdio.h>

int main()
{
  int c; 
  return 0;
} // on Intel architecture

#include <stdio.h>

int main()
{
  int c; 
  return 0;
}// on AMD architecture

/* Here I have a code on the two different machines and I want to know the 'Is the size of the data types dependent on the machine ' */

 Uddhav Arote12 июл. 2012 г., 06:20
@DietrichEpp: ну да, это не так.
 Mysticial08 июл. 2012 г., 06:49
Размеры могут определенно варьироваться между различными машинами. напримерlong 32-битный в Windows и 64-битный в Linux.
 phuclv17 апр. 2017 г., 06:39
 Dietrich Epp08 июл. 2012 г., 07:42
Intel и AMD не являются архитектурами. Они продавцы. х86 это архитектура.

Ответы на вопрос(4)

Решение Вопроса

гарантия размера для целочисленных / арифметических типов в C и C ++

Фундаментальные размеры типов C зависят от реализации (компилятор) и архитектуры, однако они имеют некоторые гарантированные границы. Поэтому никогда не следует жестко задавать размеры шрифтов и вместо этого использовать sizeof (TYPENAME), чтобы получить их длину в байтах.

 08 июл. 2012 г., 07:47
И если вы действительно заинтересованы в переносимости, вы также должны отметить, что байты могут быть разных размеров и на разных платформах.

Размеры типов в Си зависят от решений авторов компиляторов с учетом требований стандарта.

Решения разработчиков компиляторов, как правило, сильно зависят от архитектуры процессора. Например, стандарт C гласит:

A "plain" int object has the natural size suggested by the architecture of the execution environment.

хотя это оставляет много места для суждения.

На такие решения могут также влиять другие соображения, такие как совместимость с компиляторами того же производителя для других архитектур и удобство наличия типов для каждого поддерживаемого размера. Например, в 64-битной системе очевидный «натуральный размер» заint является 64-битным, но многие компиляторы все еще имеют 32-битныеint, (С 8-битнымchar и 64-битныйint, short вероятно, будет 16 или 32 бита, и у вас не может быть фундаментальных целочисленных типов, охватывающих оба размера.)

(C99 вводит «расширенные целочисленные типы», которые могут решить проблему покрытия всех поддерживаемых размеров, но я не знаю ни одного компилятора, который их реализует.)

O C (и C ++) гарантирует толькоmininum размеры для типов данных.

Но это не одинаково для разных поставщиков компиляторов для одного и того же процессора. Учтите, что существуют компиляторы с 32-разрядными длинными целыми числами для процессоров Intel x386 и другие компиляторы, которые предоставляют 64-разрядные длинные значения.

И не забывайте о десятилетии или около того боли, с которой программистам MS приходилось сталкиваться в эпоху машин Intel 286, как и со всеми различными «моделями памяти». что компиляторы навязали нам. 16-битные указатели против 32-битных сегментированных указателей. Я, например, рад, что те дни прошли.

пределяет минимальные диапазоны значений для всех типов, таких какchar, short, int, long, long long и их неподписанные аналоги.

Тем не менее, процессоры x86 от Intel и AMD по сути одинаковы с большинством компиляторов x86. По крайней мере, они предоставляют программисту одинаковые регистры и инструкции, и большинство из них работают идентично (если мы рассмотрим, что официально определено и задокументировано).

В любом случае, компилятор или его разработчик (и) должны использовать любой другой размер, необязательно совпадающий с натуральным размером операнда на целевом оборудовании, если этот размер соответствует стандарту C.

Ваш ответ на вопрос