Нам часто говорят, что аппаратному обеспечению не важно, на каком языке написана программа, поскольку оно видит только скомпилированный двоичный код, однако это не вся правда. Например, рассмотрим скромный Z80; его расширения к набору команд 8080 включают в себя такие инструкции, как CPIR, которые полезны для сканирования строк в стиле C (с нулевым символом в конце), например, для выполнения strlen()
. Разработчики, должно быть, определили, что запуск программ на C (в отличие от Pascal, где длина строки находится в заголовке) - это то, для чего их дизайн, вероятно, будет использоваться. Другой классический пример - машина Лиспа .
Какие еще примеры есть? Например, инструкции, количество и тип регистров , режимы адресации, которые делают определенный процессор предпочтительным для соглашений конкретного языка? Я особенно заинтересован в пересмотрах той же семьи.
sizeof(int)
равно 1, должна требовать, чтобы этот тип char
был подписан (поскольку он int
должен содержать все значения типа char
). Я написал код для машины, где char
и int
16-разрядные целые числа со знаком; самые большие трудности заключаются в том, что нельзя использовать объединения для преобразования типов, а эффективное хранение большого количества байтов требует ручной упаковки и распаковки. Эти проблемы незначительны по сравнению с тем, что в C возможно, что sizeof (int) == sizeof (long), так как ...
unsigned int
значениями. C99 улучшил эту ситуацию, но до C99 не было гарантированного безопасного одношагового способа сравнения потенциально отрицательного значения со значением типа unsigned int
(перед сравнением нужно было проверить, было ли число отрицательным).