тип данных int платформозависимый
От: maks1180  
Дата: 16.02.22 08:36
Оценка:
Нужен тип данных который будет: uint64_t для x64 платформ и uint32_t для x32 платформ.
Понятно, что можно самому определить какой-то. Но мне кажется должен стандарт быть на этот случай.
===============================================
(реклама, удалена модератором)
Re: тип данных int платформозависимый
От: Alexander G Украина  
Дата: 16.02.22 08:43
Оценка: +3
Здравствуйте, maks1180, Вы писали:

M>Нужен тип данных который будет: uint64_t для x64 платформ и uint32_t для x32 платформ.


Непонятно, что такое 64-разрядная и 32-разрядная платформа.
В обычном x86-64 32-разрядный int слегка более эффективен, чем 64-разрядный.
Да даже указатели иногда имеет смысл оставит 32-битными https://en.wikipedia.org/wiki/X32_ABI

Если брать такой int, как указатель, то это intptr_t и unitptr_t.
Если такой, чтобы размер массива поместился — size_t, ssize_t, ptrdiff_t.

Можно упомянуть сюда же atomic_signed_lock_free и atomic_unsigned_lock_free — тип, выгодный для атомарного счётчика.

Да, а если взять просто тип "родной" для целочисленных вычислений, то это, внезапно, просто int.
Ну а то, что он может быть 32 и 64 битным на 64 разрядных платформах, так это потому, что оба примерно одинаково "родные"
Русский военный корабль идёт ко дну!
Отредактировано 16.02.2022 8:45 Alexander G . Предыдущая версия . Еще …
Отредактировано 16.02.2022 8:45 Alexander G . Предыдущая версия .
Re[2]: тип данных int платформозависимый
От: maks1180  
Дата: 16.02.22 08:58
Оценка:
AG>Если такой, чтобы размер массива поместился — size_t, ssize_t, ptrdiff_t.

Про size_t я хотел его использовать, у меня он 8 байт на x64 платформе и 4 байт на x32 платформе. Но сбило опредение его как "Alias of one of the fundamental unsigned integer types", так как unsigned int обычно 4 байт и на x64 платформе так же.
===============================================
(реклама, удалена модератором)
Re[3]: тип данных int платформозависимый
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 16.02.22 09:01
Оценка: -1
Здравствуйте, maks1180, Вы писали:

M>так как unsigned int обычно 4 байт и на x64 платформе так же.


Это не так
Маньяк Робокряк колесит по городу
Re: тип данных int платформозависимый
От: sergii.p  
Дата: 16.02.22 09:03
Оценка:
Здравствуйте, maks1180, Вы писали:

не знаю специального такого типа в стандарте. Вроде типы завязанные на адрес должны удовлетворять этим требованиям: ptrdiff_t, size_t, intptr_t
Re: тип данных int платформозависимый
От: reversecode google
Дата: 16.02.22 09:23
Оценка: -2
unsigned long
или size_t

а как вас удается еще писать какие то программы и кому то их даже продавать
когда вы в базовых типах даже плаваете
Re[3]: тип данных int платформозависимый
От: T4r4sB Россия  
Дата: 16.02.22 09:32
Оценка:
Здравствуйте, maks1180, Вы писали:

M> Но сбило опредение его как "Alias of one of the fundamental unsigned integer types", так как unsigned int обычно 4 байт и на x64 платформе так же.


Там же написано "один из". Скорее всего, на х64 будет unsigned long long int
Нет такой подлости и мерзости, на которую бы не пошёл gcc ради бессмысленных 5% скорости в никому не нужном синтетическом тесте
Re[3]: тип данных int платформозависимый
От: Pzz Россия https://github.com/alexpevzner
Дата: 16.02.22 09:39
Оценка:
Здравствуйте, maks1180, Вы писали:

AG>>Если такой, чтобы размер массива поместился — size_t, ssize_t, ptrdiff_t.


M>Про size_t я хотел его использовать, у меня он 8 байт на x64 платформе и 4 байт на x32 платформе. Но сбило опредение его как "Alias of one of the fundamental unsigned integer types", так как unsigned int обычно 4 байт и на x64 платформе так же.


Есть ровно 4 "фундаментальных" беззнаковых целочисленных типа: unsigned char, unsigned short, unsigned int и unsigned long (есть еще нестандартный unsigned long long, но про него мы пока промолчим).

Про их размеры гарантируется лишь, что:
1. sizeof(long) >= sizeof(int) >= sizeof(short) >= sizeof(char)
2. sizeof(long) >= 4, sizeof(int) >= 2, sizeof(short) >= 2, sizeof(char) == 1

На самом деле, стандарт дает эти гарантии не в терминах sizeof, а в терминах диапазонов значений, которые вмещают соответствующие типы, но это не очень важно.

И бывают платформы, на которых sizeof(int) == 2. Например, 16-битный MS-DOS. И из современных, думаю 16-битные однокристаллки тоже. Так что не надо думать, что sizeof(int) всегда равен 4, это неверно.

Все остальные типы, всякие там int32_t, size_t и проч являются синонимами (alias'ами) кого-то из них. Причем кого именно, может зависеть от платформы и ключей сборки (через #ifdef).
Re[4]: тип данных int платформозависимый
От: Alexander G Украина  
Дата: 16.02.22 09:48
Оценка: +1
Здравствуйте, Pzz, Вы писали:

Pzz>нестандартный unsigned long long, но про него мы пока промолчим


Уже можно говорить о нём, стандартный с C99 и C++11
Русский военный корабль идёт ко дну!
Re[4]: тип данных int платформозависимый
От: Alexander G Украина  
Дата: 16.02.22 10:00
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>На самом деле, стандарт дает эти гарантии не в терминах sizeof, а в терминах диапазонов значений, которые вмещают соответствующие типы, но это не очень важно.


Разница между определениями вылезет на экзотическом CHAR_BIT, что гораздо большая экзотика, чем обычные вариации размеров инта, но всё же существует
Русский военный корабль идёт ко дну!
Re[5]: тип данных int платформозависимый
От: Pzz Россия https://github.com/alexpevzner
Дата: 16.02.22 10:03
Оценка: +1
Здравствуйте, Alexander G, Вы писали:

Pzz>>На самом деле, стандарт дает эти гарантии не в терминах sizeof, а в терминах диапазонов значений, которые вмещают соответствующие типы, но это не очень важно.


AG>Разница между определениями вылезет на экзотическом CHAR_BIT, что гораздо большая экзотика, чем обычные вариации размеров инта, но всё же существует


Существует, но очень уж редко встречается в реальной жизни. И если встретится, там вылезет много других тонких нюансов. Не думаю, что можно написать сколь-либо сложный платформо-независимый код, который будет из коробки работать на условном юниксе, и совершенно без усилий заработает как есть на платформе, в которой в байте не 8 бит, или количество байт в long/int/short не является степенью двойки.
Re[6]: тип данных int платформозависимый
От: reversecode google
Дата: 16.02.22 10:10
Оценка:
вы еще пофантазируйте о каком нибудь инопланетном цпу
ближе к топику не хотите?
чувак пишет _декстопный_ софт
и дальше x32 и x64 не уедет

поэтому size_t определен во всех стандартных хидерах
ну или unsigned long
Re[7]: тип данных int платформозависимый
От: Pzz Россия https://github.com/alexpevzner
Дата: 16.02.22 10:15
Оценка: +1
Здравствуйте, reversecode, Вы писали:

R>вы еще пофантазируйте о каком нибудь инопланетном цпу

R>ближе к топику не хотите?
R>чувак пишет _декстопный_ софт
R>и дальше x32 и x64 не уедет

Сейчас дектопный софт очень легко становится софтом для ARM. А там, глядишь, и MIPS какой-нибудь подтянется. Но вряд ли подтянется какой-нибудь условный DSP с 40-битным размером int, или чем-нибудь в этом роде.

R>поэтому size_t определен во всех стандартных хидерах

R>ну или unsigned long

size_t да, его размер совпадает с "интуитивно ясной" "битностью" платформы.

Размер unsigned long на 64-битной венде равен 4-м байтам.
Re: тип данных int платформозависимый
От: Андрей Тарасевич Беларусь  
Дата: 16.02.22 15:50
Оценка:
Здравствуйте, maks1180, Вы писали:

M>Нужен тип данных который будет: uint64_t для x64 платформ и uint32_t для x32 платформ.

M>Понятно, что можно самому определить какой-то. Но мне кажется должен стандарт быть на этот случай.

Что такое "разрядность платформы"? Если размер указателя, то у вас есть `intptr_t`/`uintptr_t` из <stdint.h>.

`size_t` тут, разумеется, ни при чем вообще.
Best regards,
Андрей Тарасевич
Re[2]: тип данных int платформозависимый
От: wl. Россия  
Дата: 16.02.22 16:08
Оценка:
Здравствуйте, Андрей Тарасевич, Вы писали:

АТ>Что такое "разрядность платформы"? Если размер указателя, то у вас есть `intptr_t`/`uintptr_t` из <stdint.h>.


А кстати да, хороший вопрос.
Возьмем пример — Аврора ОС, она 32-битная, я на одном из телефонов (AYYA T1 скорее всего) решил узнать архитектуру процессора — arm64.
Для винды тоже что-то подобное провернуть можно было
Re[4]: тип данных int платформозависимый
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 16.02.22 16:45
Оценка:
Здравствуйте, Marty, Вы писали:

M>Здравствуйте, maks1180, Вы писали:


M>>так как unsigned int обычно 4 байт и на x64 платформе так же.


M>Это не так


А где он 8? (Forth не считать, мы про C/C++)
The God is real, unless declared integer.
Re[5]: тип данных int платформозависимый
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 16.02.22 16:58
Оценка:
Здравствуйте, netch80, Вы писали:

M>>>так как unsigned int обычно 4 байт и на x64 платформе так же.


M>>Это не так


N>А где он 8? (Forth не считать, мы про C/C++)



Меня переглючило, я почему-то как unsigned long прочитал, для которого размер разный для Windows x64 и Linux x64
Маньяк Робокряк колесит по городу
Re: тип данных int платформозависимый
От: TailWind  
Дата: 17.02.22 00:12
Оценка:
M>Нужен тип данных который будет: uint64_t для x64 платформ и uint32_t для x32 платформ.
M>Понятно, что можно самому определить какой-то. Но мне кажется должен стандарт быть на этот случай.

Зачем?

Скорость обращения к 64 и к 32 на 64-бит платформе одинаковая
Однако зная точно размер перепоонения, вы не наделаете ошибок
Re: для GCC и CLang есть дефайны встроенные
От: VladCore  
Дата: 23.02.22 23:25
Оценка: 3 (1)
Здравствуйте, maks1180, Вы писали:

M>Нужен тип данных который будет: uint64_t для x64 платформ и uint32_t для x32 платформ.

M>Понятно, что можно самому определить какой-то. Но мне кажется должен стандарт быть на этот случай.

дефайны же встроенные:

x86-64
#define __INT16_MAX__ 0x7fff
#define __INT16_TYPE__ short int
#define __INT32_MAX__ 0x7fffffff
#define __INT32_TYPE__ int
#define __INT64_MAX__ 0x7fffffffffffffffL
#define __INT64_TYPE__ long int
#define __INT8_MAX__ 0x7f
#define __INT8_TYPE__ signed char


ARM 32 бита, x86 нету под рукой
#define __INT16_MAX__ 0x7fff
#define __INT16_TYPE__ short int
#define __INT32_MAX__ 0x7fffffff
#define __INT32_TYPE__ int
#define __INT64_MAX__ 0x7fffffffffffffffLL
#define __INT64_TYPE__ long long int
#define __INT8_MAX__ 0x7f
#define __INT8_TYPE__ signed char

для unsigned аналогично но с буквой U, и только в относительно новых версиях компиляторов.

у тебя какой компилятор?
Re: тип данных int платформозависимый
От: cr8  
Дата: 28.03.22 14:40
Оценка:
Здравствуйте, maks1180, Вы писали:

M>Нужен тип данных который будет: uint64_t для x64 платформ и uint32_t для x32 платформ.

M>Понятно, что можно самому определить какой-то. Но мне кажется должен стандарт быть на этот случай.

#include <cstdint>


Типы:
intptr_t
uintptr_t
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.