Размер слова C и стандартный размер - PullRequest
4 голосов
/ 03 апреля 2012

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

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

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

есть мысли?

Ответы [ 3 ]

6 голосов
/ 03 апреля 2012

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

3 голосов
/ 03 апреля 2012

Размер шрифта C long гарантированно соответствует размеру слова машины.

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

1 голос
/ 03 апреля 2012

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

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

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

...