Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Почему у int и double разные размеры при x86 и x64? / 16 сообщений из 16, страница 1 из 1
08.04.2017, 20:03
    #39435250
baden_baden
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему у int и double разные размеры при x86 и x64?
Когда ставлю в студии 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
08.04.2017, 21:14
    #39435268
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему у int и double разные размеры при x86 и x64?
baden_badenПочему у x86 и x64 одинаковая длина машинного слова?
с чего такой вывод?
...
Рейтинг: 0 / 0
08.04.2017, 21:59
    #39435280
baden_baden
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему у int и double разные размеры при x86 и x64?
Изопропил,

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

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


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

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

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

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


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

Так что никаких гарантий что разное, что одинаковое, на разных платформа нет.
...
Рейтинг: 0 / 0
09.04.2017, 09:41
    #39435368
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему у int и double разные размеры при x86 и x64?
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
09.04.2017, 09:51
    #39435369
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему у int и double разные размеры при x86 и x64?
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
23.04.2017, 17:57
    #39442914
baden_baden
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему у int и double разные размеры при x86 и x64?
Спасибо за ответы, многое прояснилось.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Почему у int и double разные размеры при x86 и x64? / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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