У меня была дискуссия с руководителем группы, который сказал мне, что с помощью uintX_t
это очень проблематично и вызывает проблемы с производительностью … Я не могу понять, почему ….
с помощью uint8_t
а также uint16_t
такой же как unsigned char
а также unsigned short
— Я не думаю, что использование этих типов вызывает проблемы с производительностью …
Именно так uint64_t
как long
……
Может быть проблемы с производительностью могут возникнуть с uint128_t
так далее..
Это правильно или я что-то упустил …
Upd
Известно, что unsigned char
а также unsigned short
размеры не должны быть 8 и 16 на всех платформах …. Просто используются классические значения …..
Гарантия размера является основной целью.
Эти типы не предназначены для проблем с производительностью. Они сделаны, чтобы гарантировать, что целочисленные размеры одинаковы для разных систем.
Например, когда вы используете int32_t
вы можете быть уверены, что его размер составляет 32 бита в любом месте, где компилируется код, но вы не уверены в размере int
,
Проблема заключается в использовании этих типов гарантированного размера может повлиять на производительность, int_fastX_t
типы могут уменьшить этот плохой эффект, потому что они гарантируют минимальный размер.
Например, компилятор может использовать 32 бит int
для int_fast16_t
в 32-битной машине …
Это вопрос типа «как долго кусок строки».
Всякий раз, когда кто-либо предъявляет претензии такого рода, которые вас волнуют, попросите показать код, который они использовали, и результаты своих тестов. Затем вы сможете оценить, применимы ли эти критерии к вашему делу, и, возможно, выполнить их самостоятельно.
Другими словами, заявка не стоит очень дорого без тестов, которые отражают вашу среду и ваше фактическое использование этих типов. Вполне возможно, что руководитель вашей группы провел тщательное профилирование рассматриваемой базы кода; возможно, он просто «думает», что uintX_t
будет медленнее. У нас нет возможности узнать, что это такое.
У вас могут возникнуть проблемы с производительностью, если вы используете uint8_t
на 32-битных процессорах, и вам не нужно автоматическое переполнение, если число больше 255.
Почему: Компилятору может потребоваться применить маску к значению перед его обработкой / использованием.
Например, 8-битное значение хранится в 32-битном регистре, вам нужно сделать сравнение с ним, и если ваш процессор не имеет инструкции для сравнения только с использованием 8 младших битов регистра, поэтому компилятор должен примените маску 0x0000FFFF перед выполнением сравнения
Вот почему у вас есть типы: int_least8_t
или же uint_fast8_t
…
Взгляните на эту страницу stdint.h чтобы увидеть все доступные типы
Они являются типами и пытаются сделать определенные типы кроссплатформенными, гарантируя их размер. В частности, в них нет ничего, что могло бы вызвать проблемы с производительностью. Проблема может быть в том, как они используются (что не будет отличаться для unsigned int
, unsigned short
, а также unsigned char
).
Короче говоря, ваша команда не права и, вероятно, является прямым следствием Принцип Питера.