|
|
ru.unix.bsd- RU.UNIX.BSD ------------------------------------------------------------------ From : Lev Serebryakov 2:5030/661.1 01 Oct 2004 22:18:24 To : Valentin Davydov Subject : А что с оптеронами? -------------------------------------------------------------------------------- 30 Sep 04 19:45, you wrote to me: >> Hо почему?!?! VD> Потому что int - это один тип (численный), а указатели - другой VD> (ссылочный). У них даже допустимые операции разные. Для работы с ними VD> в сях специальные операторы придуманы, * и &. А почему некоторые VD> программисты этого не знают - наверное, у них спрашивать надо. Все это классно. Я же не настаиваю, что бы int и void* были взаимозаменяемые. Я удивляюсь, почему int вдруг не равен арифметическому регистру... >> Ведь int должен быть самым естественным для железа размером. VD> Числа int бывают как 16-разрядные, так и 32-разрядные (C) K&R. А VD> самый естественный для x86 и далее железа размер - вообще 8 бит, как VD> минимальная индивидуально адресуемая единица пересылки данных, VD> наименьшее общее кратное длины различных команд и т.д. Hет. Самый естественный рзамер при арифметике -- размер регистра. >> Hеужели так же alpha естественно работает с 32-х битными числами, а >> не 64-х битными? VD> Альфа нативно умеет 32-битную целочисленную арифметику. 16-битную, VD> кстати, тоже. И сколько дополнительных такотв тратится на расширение знака при загрузке из памяти в регистр? И как отлавиливаются переполнения при обратной записи? А на AMD64? А на sparc64? VD> Этого вполне достаточно, чтобы при целочисленных расчётах не забивать VD> половину или 3/4 памяти данных незначащими нулями. А это уже программист решать должен, и если ему это важно, пользоватся int32_t и прочими. Hо, IMHO, абсолютно естественно, что int помещается в целочисленный регистр и наоборот! У нас, блин, псевдо-переносимый ассемблер -- или что?! Кстати, вот ведь засада: не удивлюсь (точнее -- почти уверен), если в стандарте сказано, что разница между двумя указателями одного типа дает в результате int. А тут -- может не влезть! offset_t -- это, конечно, хорошо, но есть ли оно в стандарте? Хотя да, ptrdiff_t было вроде бы... Hо это в последнем, 99 года, а Alpha появилась явно раньше... >> У нее же все регистры 64 бита... VD> У пеньтиума ммх вообще 80-битные регистры есть, так что, обязать int VD> тип быть 80 бит? double -- было бы неплохо, но вот тут IEEE-754 или как его там строго обязывает иметь 64 бита. А про int в стандарте наоборот сказано, что это должен быть естественный для архитектуры размер. VD> Да и адресные регистры, вон, у каких-то интелевых поделок 36- (или VD> 48?)битные бывают. Битность указателей - забота компилятора и только. VD> А для битности чисел sizeof() придуман. Именно. Я с этим и не спорю. Я удивляюсь, что int на 64 битной архитетуре не 64 бита _безотносительно_ размера указателя там же. Hе надо путать. VD> Программы надо писать нормально, не закладываясь на "очевидные" VD> умолчания. Проведение арифметических операций над указателями VD> (например, суммирование двух указателей) выглядит ещё более нелепо. Да, да, да. Hо при чем здесь размер int'а? // Lev --- GoldED+/W32 1.1.4.7 * Origin: Cave of Black Lion (2:5030/661.1) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.unix.bsd/3284415d9fe2.html, оценка из 5, голосов 10
|