Нужен ли int на x64? - PullRequest
       0

Нужен ли int на x64?

0 голосов
/ 25 сентября 2010

Код C, предназначенный для x64, как уже обсуждалось ранее, всегда должен использовать size_t вместо int для таких вещей, как счетчики и индексы массивов.

Учитывая это, возможно, было бы проще и менее подвержено ошибкам просто стандартизироватьна size_t (typedef'd на что-то более короткое) вместо int как обычный целочисленный тип по всей базе кода.

Что-то мне не хватает?Предполагая, что вам не нужны целые числа со знаком, и вы не храните большие массивы маленьких целых чисел (где их 32-битные вместо 64-битных могут сэкономить память), есть ли причина использовать int в предпочтении size_t?

Ответы [ 3 ]

1 голос
/ 25 сентября 2010

Я бы сказал наоборот, я бы предпочел что-то, где вы устанавливаете размер целых чисел, uint8_t ... uint64_t (а иногда и unit128_t), и это будут базовые типы. Таким образом, вы будете знать, что вы получаете.

И другие typedef, такие как size_t, а затем псевдонимы для них. Затем вы можете просто проверить typedef для uintprt_t и определить ширину вашего адреса, например,

Кроме того, людям обязательно нужны подписанные типы. Но отношение, безусловно, можно уточнить. Уже сейчас в стандарте подписанные типы вроде бы выводятся из неподписанных типов. Это может быть сделано явным путем использования префикса signed. Но наверняка этого не произойдет, люди слишком эмоционально привязаны к int:)

0 голосов
/ 25 сентября 2010

Использование size_t "для счетчиков" и в качестве общего целого типа без знака почти всегда является ошибкой проектирования. size_t достаточно для хранения размера самого большого непрерывного объекта, поддерживаемого платформой. Это сразу означает, что его можно довольно разумно использовать в качестве счетчика байтов в объекте или счетчика (или индекса) элементов в массиве (поскольку массив всегда является непрерывным объектом ). Но как только мы избавимся от требования непрерывности, size_t больше не работает. Вы не можете сознательно использовать size_t для подсчета элементов в связанном списке, так как в общем случае диапазон size_t будет недостаточным.

Конечно, использование size_t для таких целей также неправильно концептуально . size_t реализует концепцию объекта размер , а не концепцию объекта count . Использование size_t для индексации массивов оправдано только для абстрактных массивов. Использование size_t для индексации конкретных прикладных массивов, ну странно.

Лично я предпочитаю использовать unsigned для подсчета и индексации массивов (если только у меня нет более конкретного типа для этой цели), предполагая, что диапазон типов достаточен в домене моего приложения.

0 голосов
/ 25 сентября 2010

Как говорит Эли, int обычно (не всегда) размер слова, то есть предпочтительная единица для перемещения объектов вокруг памяти и процессора.Таким образом, даже если вы игнорируете использование памяти, вы все равно можете получить более высокую производительность.

Таким образом, я думаю, что вполне разумно использовать долго как «обычный» целочисленный тип со знаком, когда вам не нужен диапазонбольше +/- (2 ^ 15 - 1) или определенной ширины.

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