Исправлено 64-битное целое число в ядре Linux - PullRequest
1 голос
/ 31 марта 2020

Я хочу, чтобы в ядре linux было целое число фиксированного размера, равное 64 битам.

Мои вопросы:

  1. Если я использую unsigned long, то это может быть 64 -бит на одной архитектуре и 32-бит на другой. Правильно?
  2. Каким будет тип данных для фиксированного 64-разрядного целого числа?

Я имею в виду linux kernel

Ответы [ 2 ]

3 голосов
/ 31 марта 2020

Если я использую unsigned long, то он может быть 64-разрядным в одной архитектуре и 32-разрядным в другой. Правильно?

Да, размер unsigned long определяется реализацией и поэтому не является переносимым.

Каким будет тип данных для фиксированного 64-разрядного целого числа?

int64_t или uint64_t.

1 голос
/ 31 марта 2020

Язык C предоставляет множество типов фиксированной ширины, со знаком и без знака.

Как сказал Лундин, "размер без знака long определяется реализацией и, следовательно, непереносим".

Таким образом, общие типы, такие как int, unsigned int и float, зависят от вашего компилятора.

Вы можете увидеть полный список доступных целочисленных типов фиксированной ширины начиная с C99 в этой ссылке

int64_t, согласно документации, является целочисленным типом со знаком шириной ровно 64 бита без битов заполнения и использованием дополнения 2 для отрицательных значений ".

uint64_t, также в соответствии с документацией, " беззнаковый целочисленный тип с шириной ровно 64 бита"

Но есть и другие фиксированные целочисленные типы шириной 64 бита, которые вы можете хотелось бы посмотреть, как: uint_fast64_t, uint_least64_t

Я рекомендую вам посмотреть ссылку и получить массу удовольствия от изучения магических C типов \ o /

Вы также можете проверить доступные типы на * 10 32 * GNU lib c руководство по целочисленным типам

Надеюсь, это поможет!

...