powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Почему у int и double разные размеры при x86 и x64?
16 сообщений из 16, страница 1 из 1
Почему у int и double разные размеры при x86 и x64?
    #39435250
baden_baden
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Когда ставлю в студии x86,
Код: plaintext
1.
2.
3.
4.
5.
6.
// x86
sizeof(size_t) == 4;      //true
sizeof(double) == 8;      //true
sizeof(double*) == 4;      //true
sizeof(int) == 4;      //true
sizeof(int*) == 4;   //true



А когда выставляю x64, получаю
Код: plaintext
1.
2.
3.
4.
5.
6.
// x64
sizeof(size_t) == 8;      //true
sizeof(double) == 8;      //true
sizeof(double*) == 8;      //true
sizeof(int) == 4;      //true
sizeof(int*) == 8;   //true



Почему так? Т.е., почему размеры одних типов меняются (size_t, указатели), а другие остаются неизменными?
Почему у x86 и x64 одинаковая длина машинного слова?

Ещё вопрос: что имеют ввиду, когда говорят, что тип атомарный? Я так понял, имеют ввиду, что он вмещается в машинное слово, которое и для x86, и для x64 4 байта. И я также понял, что это хорошо для многопоточности при синхронизации, поскольку с атомарными типами можно работать, как с
Код: plaintext
1.
std::atomic<T> 

, минуя блокировки. А что такого даёт атомарность int типу
Код: plaintext
1.
std::atomic<int> 

, чего нет у
Код: plaintext
1.
std::atomic<double> 

и правильно я понимаю, что чем больше по размеру аргумент шаблона T, тем больше времени уходит на синхронизацию?
...
Рейтинг: 0 / 0
Почему у int и double разные размеры при x86 и x64?
    #39435268
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
baden_badenПочему у x86 и x64 одинаковая длина машинного слова?
с чего такой вывод?
...
Рейтинг: 0 / 0
Почему у int и double разные размеры при x86 и x64?
    #39435280
baden_baden
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Изопропил,

Думал, что раз длина int одинаковая, то и машинное слово должно быть одной длины, оно же совпадает с int.
...
Рейтинг: 0 / 0
Почему у int и double разные размеры при x86 и x64?
    #39435284
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дай определение машинного слова, которым ты пользуешься.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Почему у int и double разные размеры при x86 и x64?
    #39435287
baden_baden
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А, выходит, что платформозависимая. Из вики
Машинное слово — машинно-зависимая и платформозависимая величина, измеряемая в битах или байтах (тритах или трайтах), равная разрядности регистров процессора и/или разрядности шины данных (обычно некоторая степень двойки)
Так что по поводу типов данных, которые то разные, то одинаковые на разных платформах и по поводу атомарности скажете?
...
Рейтинг: 0 / 0
Почему у int и double разные размеры при x86 и x64?
    #39435288
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Размер указателя равен ширине шины адреса (точнее разрядности виртуального адресного
пространства для процесса). Атомарными можно считать типы, перемещение которых в память из
регистров и из памяти в регистры происходит атомарно, за один такт шины данных.

Естественно, всё это машинозависимо.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Почему у int и double разные размеры при x86 и x64?
    #39435292
baden_baden
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А почему атомарные типы должны быть обёрнуты в atomic, потоки меняют побайтово или даже побитово, если не обернуть? И что такого даёт атомарность int типу
Код: plaintext
1.
2.
3.
std::atomic<int> 
//чего нет у
std::atomic<double> 


и правильно я понимаю, что чем больше по размеру аргумент шаблона T, тем больше времени уходит на синхронизацию?
...
Рейтинг: 0 / 0
Почему у int и double разные размеры при x86 и x64?
    #39435299
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
baden_badenА почему атомарные типы должны быть обёрнуты в atomic, потоки меняют побайтово или даже
побитово, если не обернуть?

Для порядка/кроссплатформенности. Ну и операции с числами не ограничиваются сохранением в
память.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Почему у int и double разные размеры при x86 и x64?
    #39435306
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
baden_badenА, выходит, что платформозависимая. Из вики
Машинное слово — машинно-зависимая и платформозависимая величина, измеряемая в битах или байтах (тритах или трайтах), равная разрядности регистров процессора и/или разрядности шины данных (обычно некоторая степень двойки)
Так что по поводу типов данных, которые то разные, то одинаковые на разных платформах и по поводу атомарности скажете?
Даже на одной архитектуре разные компиляторы могут разный размер int иметь

Для полного сноса крыши - общие и адресные регистры могут иметь разную разрядность
...
Рейтинг: 0 / 0
Почему у int и double разные размеры при x86 и x64?
    #39435311
baden_baden
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за ответы.
Но в остальных вопросах ещё не разобрался.
...
Рейтинг: 0 / 0
Почему у int и double разные размеры при x86 и x64?
    #39435312
baden_baden
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovДля порядка/кроссплатформенности. Ну и операции с числами не ограничиваются сохранением в
память.

Для какого порядка? А какие ещё операции, кроме чтения и записи?
...
Рейтинг: 0 / 0
Почему у int и double разные размеры при x86 и x64?
    #39435316
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
baden_badenА какие ещё операции, кроме чтения и записи?
Те, которые описаны в документации по шаблону atomic.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Почему у int и double разные размеры при x86 и x64?
    #39435353
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
baden_badenА, выходит, что платформозависимая. Из вики
Машинное слово — машинно-зависимая и платформозависимая величина, измеряемая в битах или байтах (тритах или трайтах), равная разрядности регистров процессора и/или разрядности шины данных (обычно некоторая степень двойки)
Так что по поводу типов данных, которые то разные, то одинаковые на разных платформах и по поводу атомарности скажете?


По стандарту языка C++ (и также C) размеры переменных разных типов в байтах не определены, кроме размера типа char и его производных. Задается только относительное соотношение между этими размерами в виде неравенства через "больше или равно".

Так что никаких гарантий что разное, что одинаковое, на разных платформа нет.
...
Рейтинг: 0 / 0
Почему у int и double разные размеры при x86 и x64?
    #39435368
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
baden_badenКогда ставлю в студии x86,
Код: plaintext
1.
2.
3.
4.
// x86
sizeof(size_t) == 4;      //true
sizeof(double*) == 4;      //true
sizeof(int*) == 4;   //true



А когда выставляю x64, получаю
Код: plaintext
1.
2.
3.
4.
// x64
sizeof(size_t) == 8;      //true
sizeof(double*) == 8;      //true
sizeof(int*) == 8;   //true



Почему так? Т.е., почему размеры одних типов меняются (size_t, указатели), а другие остаются неизменными?
Вполне логично: адресное пространство x86 = 2^32 байт, x64 = 2^64 байт
Указатели (T*) и размеры (size_t) работают с адресным пространством, т.е. указатель x64 может указывать на любой байт из 2^64, соответственно он должен быть 64 бита или 8 байт. Тоже самое с size_t, размер может быть до 2^64.

Остальные типы с адресным пространством никак не связаны, поэтому оставлены как есть, а для x64 добавлены новые.
...
Рейтинг: 0 / 0
Почему у int и double разные размеры при x86 и x64?
    #39435369
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
baden_badenЕщё вопрос: что имеют ввиду, когда говорят, что тип атомарный? Я так понял, имеют ввиду, что он вмещается в машинное слово, которое и для x86, и для x64 4 байта. И я также понял, что это хорошо для многопоточности при синхронизации, поскольку с атомарными типами можно работать, как с
Код: plaintext
1.
std::atomic<T> 

, минуя блокировки. А что такого даёт атомарность int типу
Код: plaintext
1.
std::atomic<int> 

, чего нет у
Код: plaintext
1.
std::atomic<double> 

и правильно я понимаю, что чем больше по размеру аргумент шаблона T, тем больше времени уходит на синхронизацию?
Атомарный значит его изменение происходит атомарно. И это касается в первую очередь изменения.
Например если два потока сделают одновременно
Код: plaintext
1.
x++


то атомарность гарантирует что х увеличится на 2. В других случаях может быть на 1.

Почитай книжку , там хорошо написано про std::atomic.

Размер аргумента не влияет на время. Память читается кэшами проца блоками по 64 байта.
...
Рейтинг: 0 / 0
Почему у int и double разные размеры при x86 и x64?
    #39442914
baden_baden
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за ответы, многое прояснилось.
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Почему у int и double разные размеры при x86 и x64?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]