В языке си и си++ есть множество интегральных типов данных, ну взять к примеру беззнаковый size_t.
Используется в основном как счетчик для больших циклов.
Но как быть если сам счетчик фигурирует не только для указаний индексов, а для вычислений в самих выражениях.
К примеру цикл от 0 до 1000000 выполняет банальную аккумуляцию. пусть кумулятативная переменна будет unsigned int var, а счетчик size_t i, тогда выражение в цикле может иметь следующий вид:
var+=static_cast(i);
Как видно фигурирует дополнительное преобразование типа, что существенно снижает эффективность кода, по сравнению с тем, если бы был бы счетчик типа int.
В таком случае size_t целесообразнее заменить на тип int или саму переменную создать типа size_t.
Или логика здесь происходит от величины значений, так например если мы используем int или даже long то в типе size_t надобности никакой нет так как они в любом случае будут весить от 4 до 8 байт каждый и надо пользоваться size_t только при работе с типами long long???
Другие языки программирования и технологии
Давно интересует такой вопрос по плюсам
Интегральный – это значит неразрывно связанный.
Интегрированный – это значит объединённый с чем-либо.
std::size_t – псевдоним для одного из фундаментальных целочисленных беззнаковых типов результата, возвращаемого операторами sizeof и alignof.
std::size_t может хранить максимальный размер теоретически возможного объекта любого типа (включая массивы). На большинстве платформ (за исключением систем с адресацией по сегментам) size_t может безопасно хранить значение любого указателя, кроме указателей на члены классов, таким образом, являясь синонимом std::uintptr_t.
std::size_t обычно используется для индексации массивов и счетчиков циклов. Программы, которые используют другие типы, например unsigned int, для индексации массивов, могут неправильно работать на, например, 64-битных системах, когда индекс превзойдет UINT_MAX или если он полагается на возможность переполнения 32-битного числа.
При индексации C++ контейнеров, таких как std::string, std::vector, и т. д. для индекса используется соответствующий тип, объявленный через typedef size_type в типе контейнера. Обычно этот тип определен как синоним std::size_t.
Интегрированный – это значит объединённый с чем-либо.
std::size_t – псевдоним для одного из фундаментальных целочисленных беззнаковых типов результата, возвращаемого операторами sizeof и alignof.
std::size_t может хранить максимальный размер теоретически возможного объекта любого типа (включая массивы). На большинстве платформ (за исключением систем с адресацией по сегментам) size_t может безопасно хранить значение любого указателя, кроме указателей на члены классов, таким образом, являясь синонимом std::uintptr_t.
std::size_t обычно используется для индексации массивов и счетчиков циклов. Программы, которые используют другие типы, например unsigned int, для индексации массивов, могут неправильно работать на, например, 64-битных системах, когда индекс превзойдет UINT_MAX или если он полагается на возможность переполнения 32-битного числа.
При индексации C++ контейнеров, таких как std::string, std::vector, и т. д. для индекса используется соответствующий тип, объявленный через typedef size_type в типе контейнера. Обычно этот тип определен как синоним std::size_t.
>> фигурирует дополнительное преобразование типа, что существенно снижает эффективность кода, по сравнению с тем, если бы был бы счетчик типа int.
Вовсе не обязательно.
Если у типов общий примитив, то типкаст между ними должен быть очень дешевым: ведь он фактически сводится к изменению свойства в таблице переменных (а значение не трогается). Например, если оба типа на примитиве DWORD, то кагбэ незачем его значение по памяти таскать: меняем логику обработки максимального разряда в выражениях (типа ставим переменной в таблице флаг "знаковое значение"), и все.
Ну, это "как должно быть". Как на самом деле - зависит от компилятора. Смотрите в отладчике генерируемый машинный код типкаста, если разбираетесь в асме...
Вовсе не обязательно.
Если у типов общий примитив, то типкаст между ними должен быть очень дешевым: ведь он фактически сводится к изменению свойства в таблице переменных (а значение не трогается). Например, если оба типа на примитиве DWORD, то кагбэ незачем его значение по памяти таскать: меняем логику обработки максимального разряда в выражениях (типа ставим переменной в таблице флаг "знаковое значение"), и все.
Ну, это "как должно быть". Как на самом деле - зависит от компилятора. Смотрите в отладчике генерируемый машинный код типкаста, если разбираетесь в асме...
Похожие вопросы
- Хочу задать вам один интересующий меня вопрос на счёт продвижения сайта, но начну с истории.
- Хочу поставить MOPSlinux 6.2 , интересует такой вопрос, драйвер на интернет нужен или пойдет так же как на висте?
- Я пытаюсь научиться Веб-дизайну по книгам и сайтам и меня интересует один вопрос...
- iq option. Интересует несколько вопросов.
- Каким образом происхoдит разработка приложения, меня интересует такой вопрос..
- помогите с кодом на плюсах, меня интересует лишь формальный синтаксис
- интересно,почему людей,которые отвечают сдесь на вопросы больше интересует граматность написания,а не СМЫСЛ ВОПРОСА!?
- Вопрос по контакту, интересующий многих
- Вопрос программистам 1С, которые ДАВНО уже программируют в 1С...
- Интересует вопрос, можно-ли обойтись html5 и не учить php? Если строить серьезные и большие сайты.
Выберите вариант, наиболее удачный? В приоритете как всегда скорость и безопасность.