Распределение памяти для разных типов данных будет зависеть от архитектуры? - PullRequest
0 голосов
/ 25 марта 2010

Привет, все ли выделено памяти для разных типов переменных, скажем, float, int и char различны для разных архитектур?Заранее спасибо.

Ответы [ 3 ]

5 голосов
/ 25 марта 2010

Это определенно тот случай, когда float, int и char могут иметь разные размеры на разных устройствах, да. Это определяется реализацией вашего компилятора Си. Все, на что вы можете рассчитывать на действительно переносимый код, это:

sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long)

И это sizeof(char) == 1. В C99 есть несколько типов, которые имеют определенный размер битов, и они могут быть вам полезны, если вам нужно сохранить размер типа переносимым от архитектуры к архитектуре.

Редактировать: я посмотрел информацию в спецификации. Раздел 5.2.4.2.1, «Размеры целочисленных типов» - это то, что вы ищете:

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

UCHAR_MAX         255 // 2^8 - 1
USHRT_MAX       65535 // 2^16 - 1
UINT_MAX        65535 // 2^16 - 1
ULONG_MAX  4294967295 // 2^32 − 1

И так далее ...

2 голосов
/ 25 марта 2010

Да, определенно.int, в частности, особенно склонен к этому: старые 8-битные и 16-битные архитектуры неизменно имели 16-битные int с, тогда как современные 32-битные и 64-битные архитектуры неизменно используют 32-битные ints.Вот как int определяется как be - "естественный" размер целых чисел для архитектуры, для которой вы компилируете!

0 голосов
/ 25 марта 2010

Как уже говорили другие, это полное ДА. Тем не менее, есть также часть о порядке байтов, о которой никто не упомянул. Различные архитектуры могут хранить байты, которые составляют тип, также в разных порядках.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...