Предполагается, что целые числа в C обрабатываются спецификацией оборудования или обрабатываются программным обеспечением?

Предполагается, что целые числа в C обрабатываются спецификацией оборудования или обрабатываются программным обеспечением?

Под целым я имею в виду примитив "int"

Основная идея заключается в том, что если целые числа в C не зависят от оборудования, будет ли нарушением стандарта реализация gcc различных обработчиков целых чисел. Таким образом, у вас может быть свой традиционный 32-битный обработчик целых чисел, а затем вы также можете иметь обработчики для 256-битных целых чисел или, может быть, даже целых чисел динамического размера.

Я знаю о long и long long, но я не уверен, что они не зависят от предоставленного оборудования, и я хотел бы просто указать размер/тип обработчика «int», который будет использоваться при создании цепочки инструментов.

Я также понимаю опасность этого (потому что построение 256-битных целых чисел с помощью 32-битного целочисленного компилятора было бы плохо!), но для тех фрагментов кода, которые требуют чего-то вроде библиотеки gmp, я думаю, что это значительно улучшит читаемость кода. . Совместимость будет такой же, но зависимость будет от компилятора, а не от самого кода.

Сумасшедшая идея, я знаю... но вернемся к первоначальному вопросу:

Предполагается, что целые числа в C обрабатываются спецификацией оборудования или обрабатываются программным обеспечением?


person Crazy Chenz    schedule 26.07.2009    source источник
comment
Возможно, вы захотите взглянуть на C++ и его возможности перегрузки операторов.   -  person Inshallah    schedule 26.07.2009
comment
Насколько мне известно, размер целого числа зависит от прихотей автора компилятора. Обычно они соответствуют размеру int базовой архитектуре.   -  person Aditya Sehgal    schedule 26.07.2009
comment
вы могли бы просто сдаться и вместо этого использовать haskell для этих частей программы такие большие числа"> stackoverflow.com/questions/1184296/ Я бы не ожидал, что это приведет к значительному снижению производительности, и может даже работать быстрее, в зависимости от того, какая это программа.   -  person Breton    schedule 26.07.2009


Ответы (3)


Стандарт говорит

«Обычный» объект int имеет естественный размер, предложенный архитектурой среды выполнения (достаточно большой, чтобы содержать любое значение в диапазоне от INT_MIN до INT_MAX, как определено в заголовке <limits.h>).

И описание <limits.h> ограничений INT_MIN должно быть не более -32767, а INT_MAX должно быть не менее 32767. Поэтому, если ваше оборудование имеет 12-битное слово, вы должны использовать два слова для int.

person AProgrammer    schedule 26.07.2009
comment
По сути, в пространстве ядра EE — это аппаратное обеспечение. В пользовательском пространстве ядром является EE. Таким образом, int должен быть естественным размером аппаратного обеспечения для своего рода цепочки EE. - person Crazy Chenz; 26.07.2009
comment
Я видел, как компилятор C для 8-битного микроконтроллера использует 8-битные целые числа. Когда вы находитесь в этом пространстве и, вероятно, уже делаете такие вещи, как запрет рекурсии, характеристика естественного размера int важнее, чем ограничение минимального размера. - person Captain Segfault; 28.07.2009
comment
Когда вы приходите к несовместимой реализации, есть много вещей. Например, я также видел 6-битный символ. 8-битные целые на самом деле кажутся более странными, чем 6-битные байты, поскольку уже есть хороший выбор для 8-битных данных (char), а наличие 8-битных целых чисел означает либо двустороннюю связь между char, short, int и long, либо только long как тип с более чем 8 битами. - person AProgrammer; 28.07.2009

Да, int будет обрабатываться в собственном размере. Таким образом, sizeof(int) может дать вам другое значение в зависимости от того, на какой системе вы компилируете и работаете. Вся математика для int будет обрабатываться собственными инструкциями ЦП — гораздо быстрее, чем программно. Если вам нужен int256, вам нужно будет написать его самостоятельно. И я уверен, что существуют целочисленные библиотеки произвольного размера.

person Kip    schedule 26.07.2009

Реализация C, в которой реализованы 256-битные целые числа, будет полностью соответствовать стандарту C (но обратите внимание, что она должна делать long int и long long int как минимум такой же длины).

Однако код, созданный таким компилятором, как правило, не будет совместим по ссылкам с кодом, созданным другими компиляторами на той же платформе, что является одной из причин, по которой это не делается на практике.

person caf    schedule 26.07.2009
comment
Ну, я вижу, что это используется только в пользовательской цепочке инструментов или в среде кросс-компилятора. Поэтому вам все равно придется связать все, построенное с теми же спецификациями компилятора. - person Crazy Chenz; 26.07.2009