User Tag List

Показано с 1 по 10 из 16

Тема: Имеет ли смысл использовать короткие целые типы в локальных переменных и параметрах?

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #16

    Регистрация
    06.02.2017
    Адрес
    г. Тольятти
    Сообщений
    36
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от weiv Посмотреть сообщение
    Итак, имеет ли смысл использовать короткие целые типы в переменных и параметрах? Допустим, мы знаем, что в данном случае диапазона выбранного короткого целого типа (например, shortint / signed char) нам хватает с головой. Надо ли нам использовать именно его, или выгоднее не париться, и использовать целый тип по умолчанию (32/64-битный)? Вопрос экономии памяти в данном случае неоднозначен, т.к. команды работы с 32битными значениям обычно короче, чем с 8-16 битными (по крайней мере, для x86, если я не ошибаюсь). Да и вообще он на современных архитектурах малоактуален, особенно для переменных, а не больших массивов данных. Более актуален вопрос быстродействия.
    Лучше всего использовать "родную" разрядность.
    Например 32 бита для x86 в режиме 386. Или 64 для современных.
    У современных процессоров (x86/64) АЛУ обычных (не SSE) команд заточено под размер регистров. Действия для 64 бит одного операнда и 64 бит другого операнда выполняются одной микрокомандой. Для 32-битной арифметики у 64 битных процессоров есть соответствующие маски. Т.е. что 64 битная команда, что 32 битная - всё равно одна микрокоманда.
    Но если используется 8битная арифметика, то некоторые современные процессоры впадают в ступор (пропускают такты) на примитивнейших командах типа ADD AH,AL. Дело в том, что здесь действие-то выполняется над частями одного регистра EAX (один и тот же регистр одновременно и первый операнд, и второй операнд и результат).

    Но на самом деле не всё так просто. Сейчас новая парадигма программирования - принцип локальности данных.
    Программисты стараются расположить рядом совместно используемые данные чтобы они поодновременнее попадали в кэш-память.
    Соответственно, если уместите свои переменные в меньшее количество строк кэш-памяти, то и загружаться данные будут быстрее.

    Итак резюме. Если данных много (мегабайты), то по возможности сжимайте их и используйте чуть ли не побитно. Усложнение программы будет незначительным, а эксплуатация кэша снизится многократно.
    Если же данные целиком лезут в кэш-память, то извращаться не надо. Более того, и x86 пользоваться не надо - лучше переходить на SSE/AVX https://ru.wikipedia.org/wiki/AVX - там и регистров больше и в каждый можно запихнуть несколько переменных.
    А вообще, компиляторы сейчас пошли шибко умные и сами могут делать SSE/AVX при указании соответствующих ключиков.

  2. #16
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Не могу понять смысл доработки...
    от Quest в разделе Изображение
    Ответов: 4
    Последнее: 02.02.2017, 05:25
  2. Ответов: 10
    Последнее: 14.12.2016, 22:46
  3. Ответов: 21
    Последнее: 24.05.2013, 09:11
  4. Есть ли смысл Rygar'а?
    от ALKO в разделе Игры
    Ответов: 2
    Последнее: 11.01.2011, 17:12

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •