LINUX.ORG.RU

с++ cstdint

 


0

2

Стоит ли использовать его типы всегда вместо обычных? Из плюсов - хорошая переносимость кода, а минусы есть? Чем значения fast отличаются от не fast? Чем значения least отличаются от не least? Когда нужно использовать значения intptr_t/uintptr_t? А что будет если размер типа не поддерживается платформой ?


При сериализации/десериализации нужно юзать cstdint типы. Во всех остальных случаях - обычные.

Pavval ★★★★★
()
Ответ на: комментарий от Pavval

А в чем преимущество обычных типов, не из cstdint типов? Мне кажется правильней использовать везде cstdint, более конкретней код, или я не прав?

jyili
() автор топика
Ответ на: комментарий от jyili

Преимущество в том, что не надо подключать <cstdint>, очевидно же.

ilammy ★★★
()
Ответ на: комментарий от jyili

правильней использовать везде cstdint

Если важен размер и диапазон значений — то да. Размер и диапазон обычно важен только когда в спецификации алгоритма/протокола написано, что надо использовать N байтов. Остальные случаи — это или внезапно обнаруживаемая казуистика из разряда «ну кто бы мог подумать, что может быть больше 4 294 967 295 %понятий предметной области%», или какой-нибудь тулчейн под бог знает что, где uint32_t нет, int == short, но двух байтов мало.

ilammy ★★★
()
Ответ на: комментарий от jyili

А в чем преимущество обычных типов

int по определению - наиболее эффективный для вычислений на конкретной машине. В отличие от того же int32_t, который и ним может не совпадать.

Plain ints have the natural size suggested by thearchitecture of the execution environment

Pavval ★★★★★
()
Последнее исправление: Pavval (всего исправлений: 2)
Ответ на: комментарий от Pavval

А fast значение (из cstdint) эффективней int?

jyili
() автор топика
Ответ на: комментарий от Pavval

int по определению - наиболее эффективный для вычислений на конкретной машине.

Так было лет эдак 20 тому назад, а сейчас это ещё одни стандартный тип.

mashina ★★★★★
()
Ответ на: комментарий от jyili

А в чем преимущество обычных типов, не из cstdint типов? Мне кажется правильней использовать везде cstdint, более конкретней код, или я не прав?

Стандартные типы это легаси, сейчас не имеют какой-либо смысловой нагрузки, быть может кроме char, и в общем виде заранее не возможно узнать какой из них тебе подойдёт. А подойти может далеко не любой...

Снизу битность ограничивается диапазоном возможных значений, а сверху - объёмом памяти который будут занимать данные. Например, если работаешь с несколькими значениями то всё равно какую битность использовать - можно выбрать самый быстрый тип. А если есть много однотипных данных, то вероятно придётся выбрать наименьшую подходящую битность чтобы эффективно использовать кеш CPU.

Стандартные типы дают только гаранитю на битнось снизу, причём наиболее востребованный сейчас тип имеет убоговатый литерал 'long long'. В общем, без аналога cstdint + {char, bool, size_t} уже давно никак не обойтись и если посмотришь в какой-нибудь зрелый c/c++ проект, то наверняка увидешь использование сstdint, либо свои подобные велосипеды.

mashina ★★★★★
()
Ответ на: комментарий от mashina

Так было лет эдак 20 тому назад, а сейчас это ещё одни стандартный тип.

Так написано в стандарте. В любом из.

Pavval ★★★★★
()
Ответ на: комментарий от intelfx

x86_64 sizeof(int) == 4?

Вопрос реализации компиляторов, а не платформы. Захотели больше обратной совместимости и оставили 4.

Pavval ★★★★★
()
Ответ на: комментарий от intelfx

Так для x86_64 четырёхбайтовый инт оптимален?

А что такое оптимален? Вмещает много, занимает в памяти мало, работать с ним легко.

andreyu ★★★★★
()
Ответ на: комментарий от Nietzsche

при чем тут инструкции, речь идет про данные

при чем тут кэш-миссы, длина кэш-линии сегодня обычно 64 бита

anonymous
()
Ответ на: комментарий от intelfx

По скорости работы. Partial register writes, вот это всё.

Слишком расплывчато.
Допустим есть большой вектор неких структур. Обработка таких структур производится в цикле. Уменьшение sizeof такой структуры позволит сократить количество cache-miss.

andreyu ★★★★★
()
Ответ на: комментарий от anonymous

при чем тут инструкции, речь идет про данные

Ну так и данные тоже лежат в кеше. И чем чаще нужные данные попадают в кеш, тем быстрее с ними работа. Тем выше скорость обработки таких данных.

при чем тут кэш-миссы, длина кэш-линии сегодня обычно 64 бита

Это где размер кеш-лайна 64 бита? Если речь о x86, то кеш-лайн 64 байта.

andreyu ★★★★★
()
Ответ на: комментарий от mashina

Знчт использование везде типов из cstdint не плохо? Битность снизу - не меньше какого то значения? И вы упомянули char, не на всех платформах он будет 8битный, почему бы не использовать для хранения фиксированый тип?

jyili
() автор топика
Ответ на: комментарий от jyili

В том, что размер «обычных типов» пропорционален машинному слову. Образно говоря это более производительно, в общем случае.

RiseOfDeath ★★★★
()
Ответ на: комментарий от jyili

Знчт использование везде типов из cstdint не плохо?

да.

И вы упомянули char, не на всех платформах он будет 8битный, почему бы не использовать для хранения фиксированый тип?

В смысле, почему не везде использовать 8битные байты?

mashina ★★★★★
()
Ответ на: комментарий от jyili

Технически не будет определён соответствующий тип и не будет дефайнов с лимитами по которым можно попробовать узнать об отсутствии типа. Что делать дальше уже вопрос к разработчику - можно не собираться на таких платформах или заменить тип на свою софтварную реализацию.

mashina ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.