OSDev
http://osdev.ru/

модель данных для x86_64
http://osdev.ru/viewtopic.php?f=5&t=995
Страница 1 из 1

Автор:  Lincor [ 21 авг 2014, 14:48 ]
Заголовок сообщения:  модель данных для x86_64

собственно, сабж. насколько я знаю, их четыре:
  • LLP64;
  • LP64;
  • ILP64;
  • SILP64.
сам я больше склоняюсь к ILP64, иначе 64-битная платформа не используется по максимуму. с другой стороны, вероятно лютейшее выжирание памяти. так какая же модель данных лучше?

кто не понял, поясняю: речь о размерах типов.
LLP64: short, int, long - 32 бита. long long, указатели - 64 бита.
LP64: short, int - 32 бита. long, long long, указатели - 64 бита.
ILP64: short - 32 бита. int, long, long long, указатели - 64 бита.
SILP64: short, int, long, long long, указатели - 64 бита.

Автор:  pavia [ 21 авг 2014, 20:39 ]
Заголовок сообщения:  Re: модель данных для x86_64

Давно есть стандарт и нечего лохматить бабушку.

Кто не понял int равен базовому типу системы т.е 64 бита long 128 бит. Указатель 64

Автор:  Lincor [ 21 авг 2014, 21:41 ]
Заголовок сообщения:  Re: модель данных для x86_64

pavia писал(а):
Давно есть стандарт и нечего лохматить бабушку.

Кто не понял int равен базовому типу системы т.е 64 бита long 128 бит. Указатель 64

нет никакого стандарта. все перечисленные модели применяются. кстати, где вы умудрились найти 64-битный int? это ж ILP64, большая редкость. обычно используется LP64, в венде - LLP64. а 128 битный long - вообще чушь, на x86-64 такого не бывает.
а указатели, кстати, не обязательны равны машинному слову. man x32 ABI. но это уже оффтоп.

Автор:  pavia [ 21 авг 2014, 22:48 ]
Заголовок сообщения:  Re: модель данных для x86_64

Стандарт С
6.3.1.1
The rank of a signed integer type shall be greater than the rank of any signed integer
type with less precision.
— The rank of long long int shall be greater than the rank of long int, which
shall be greater than the rank of int, which shall be greater than the rank of short
int, which shall be greater than the rank of signed char.

Стандарт Си++
Plain ints have the natural size
suggested by the architecture of the execution environment44)

Автор:  Lincor [ 22 авг 2014, 01:49 ]
Заголовок сообщения:  Re: модель данных для x86_64

pavia писал(а):
Стандарт С
6.3.1.1
The rank of a signed integer type shall be greater than the rank of any signed integer
type with less precision.
— The rank of long long int shall be greater than the rank of long int, which
shall be greater than the rank of int, which shall be greater than the rank of short
int, which shall be greater than the rank of signed char.

Стандарт Си++
Plain ints have the natural size
suggested by the architecture of the execution environment44)

э, в стандарте С же >=! по стандарту С, такие вещи, как, например, sizeof(char) == sizeof(long long) == 64, вполне приемлемы. там только указан минимальный диапазон значений для каждого типа.

Автор:  Lincor [ 22 авг 2014, 01:54 ]
Заголовок сообщения:  Re: модель данных для x86_64

pavia писал(а):
Стандарт С
6.3.1.1
The rank of a signed integer type shall be greater than the rank of any signed integer
type with less precision.
— The rank of long long int shall be greater than the rank of long int, which
shall be greater than the rank of int, which shall be greater than the rank of short
int, which shall be greater than the rank of signed char.

Стандарт Си++
Plain ints have the natural size
suggested by the architecture of the execution environment44)

это точно стандарт C? C99?

Автор:  Lincor [ 22 авг 2014, 12:21 ]
Заголовок сообщения:  Re: модель данных для x86_64

pavia писал(а):
Стандарт С
6.3.1.1
The rank of a signed integer type shall be greater than the rank of any signed integer
type with less precision.
— The rank of long long int shall be greater than the rank of long int, which
shall be greater than the rank of int, which shall be greater than the rank of short
int, which shall be greater than the rank of signed char.

ага, все ясно. тут речь о integer conversion rank, который никакого отношения к размерам типов не имеет.

Автор:  Himik [ 23 авг 2014, 17:01 ]
Заголовок сообщения:  Re: модель данных для x86_64

Lincor писал(а):
ага, все ясно. тут речь о integer conversion rank, который никакого отношения к размерам типов не имеет.

Похоже что имеет, потому что в начале явно сказано о связи ранга с его точностью (по сути его размером).

Все модели мне не нравятся, потому что разные типы получили одинаковое содержание. Не вижу смысла приравнивать типы друг к другу. Обычно размер short является char*2, int является short*2, а long равен натуральному машинному размеру. Так сделано в большинстве C компиляторов.
Если в какой-то функции лучше будет работать long в место short, то надо прописывать long, а short просто не использовать.

Автор:  Lincor [ 23 авг 2014, 19:11 ]
Заголовок сообщения:  Re: модель данных для x86_64

Himik писал(а):
Все модели мне не нравятся, потому что разные типы получили одинаковое содержание. Не вижу смысла приравнивать типы друг к другу. Обычно размер short является char*2, int является short*2, а long равен натуральному машинному размеру. Так сделано в большинстве C компиляторов.
Если в какой-то функции лучше будет работать long в место short, то надо прописывать long, а short просто не использовать.

таки да, ошибся. надо было написать не 32, а <64.

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/