Размер слова C и стандартный размер

в этой статье, взятой из книги «Разработка ядра Linux»: http://www.makelinux.net/books/lkd2/ch19lev1sec2
там говорится:

Размер типа C long гарантированно будет размером машинного слова. Однако с другой стороны, код не может предполагать, что стандартные типы C имеют какой-либо определенный размер. Кроме того, нет гарантии, что int имеет тот же размер, что и long.

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

Есть предположения?


person Yarel    schedule 03.04.2012    source источник
comment
stackoverflow.com/questions/589575/size-of-int-long-etc   -  person Rohit Vipin Mathews    schedule 03.04.2012
comment
С этим связано много вопросов, например: Какие-либо гарантированные минимальные размеры для типов в C? Его наиболее популярный ответ перенаправляет на Википедия: Типы данных C.   -  person mouviciel    schedule 03.04.2012


Ответы (3)


Иногда люди в Интернете ошибаются. Размеры фиксируются ABI. Порты Linux не обязательно создают оригинальный ABI (обычно следуют рекомендации другой платформы или производителя), поэтому никто не дает никаких гарантий относительно int и long. Термин «машинное слово» также имеет очень некорректное определение.

person Potatoswatter    schedule 03.04.2012

Размер типа C long гарантированно будет размером машинного слова.

Это неправильно для многих платформ. Например, во встроенном мире обычно 8-битные MCU (например, HC08) имеют 8-битный размер слова, а 16-битные MCU (например, MSP430) имеют 16-битный размер слова, но long на этих платформах 32-битный. . В Windows x64 (компилятор MSVC) размер слова 64-битный, а long - 32-битный.

person ouah    schedule 03.04.2012

Стандарт C не знает, что такое слово, а реализация C может делать что-то необычным. Итак, ваша книга неправильная. (например, некоторая реализация C может использовать 64 бита long на 8-битном микроконтроллере).

Однако стандарт C99 определяет заголовок <stdint.h> с такими типами, как intptr_t (целочисленный тип с тем же размером, что и указатели void*) или int64_t (64-битное целое число) и т. Д.

См. Также этот вопрос и страницу википедии на Типы данных C.

person Basile Starynkevitch    schedule 03.04.2012