История изменений
Исправление KivApple, (текущая версия) :
прежде чем выделить int под счётчик от 0 до 10
Я вроде где-то слышал, что на некоторых (вполне возможно в том числе и x86) платформах наиболее быстро выполняются команды работы с переменными соответствующими разрядности процессора или кратные ей (например, на x86_64 такими будут 32-битные и 64-битные, а вот 16-битные и 8-битные инструкции будут тормозить, на x86 оптимальный размер переменной лишь один - 32 бита, на всяких ARM не знаю, но подозреваю, что тоже 32 бита). И уж точно быстрее выполняются обращения к выровненным данным. В свете этой информации int вполне может оказаться быстрее char, если у тебя не 8-битный процессор. А в оптимизации по скорости нет ничего зазорного на ПК, это только под микроконтроллеры компилируют с -Os.
Кстати, насчёт тормозов инструкций не той разрядности вполне есть пруф. Команды, работающие с 16-разрядными переменными на x86, кодируются с помощью специального префикса, а 32-разрядные - без него. Как следствие, процессор парсит команду дольше из-за этого самого лишнего байта префикса. И код получается жирнее из-за этих самых префиксов.
То есть сэкономив 2 байта и сделав 16-битную переменную вместо 32-битной на x86 ты потеряешь по байту на каждом обращении к ней (а обращаются к переменной как правило больше одного раза), а также немного скорости. Стоит ли игра свеч?
Зато стандарт более-менее гарантирует, что int будет иметь оптимальный размер для данной платформы (разве что на всяких восьмибитных микроконтроллерах int превышает размер машинного слова и поэтому char даст выигрыш), поэтому вполне разумно пихать его везде, где нет иных причин выбрать другой тип (для строки, а не одиночной переменной char уже даст очень заметный выигрыш в размере, поэтому стоит выбрать таки его, где-то int мало и надо long long).
Исправление KivApple, :
прежде чем выделить int под счётчик от 0 до 10
Я вроде где-то слышал, что на некоторых (вполне возможно в том числе и x86) платформах наиболее быстро выполняются команды работы с переменными соответствующими разрядности процессора или кратные ей (например, на x86_64 такими будут 32-битные и 64-битные, а вот 16-битные и 8-битные инструкции будут тормозить, на x86 оптимальный размер переменной лишь один - 32 бита, на всяких ARM не знаю, но подозреваю, что тоже 32 бита). И уж точно быстрее выполняются обращения к выровненным данным. В свете этой информации int вполне может оказаться быстрее char, если у тебя не 8-битный процессор. А в оптимизации по скорости нет ничего зазорного на ПК, это только под микроконтроллеры компилируют с -Os.
Кстати, насчёт тормозов инструкций не той разрядности вполне есть пруф. Команды, работающие с 16-разрядными переменными на x86, кодируются с помощью специального префикса, а 32-разрядные - без него. Как следствие, процессор парсит команду дольше из-за этого самого лишнего байта префикса. И код получается жирнее из-за этих самых префиксов.
То есть сэкономив 2 байта и сделав 16-битную переменную вместо 32-битной на x86 ты потеряешь по байту на каждом обращении к ней (а обращаются к переменной как правило больше одного раза), а также немного скорости. Стоит ли игра свеч?
Зато стандарт более-менее гарантирует, что int будет иметь оптимальный размер для данной платформы (разве что на всяких восьмибитных микроконтроллерах int превышает размер машинного слова и поэтому char даст выигрыш), поэтому вполне разумно пихать его везде, где нет иных причин выбрать другой тип (для строки char уже даст очень заметный выигрыш в размере, поэтому стоит выбрать таки его, где-то int мало и надо long long).
Исправление KivApple, :
прежде чем выделить int под счётчик от 0 до 10
Я вроде где-то слышал, что на некоторых (вполне возможно в том числе и x86) платформах наиболее быстро выполняются команды работы с переменными соответствующими разрядности процессора или кратные ей (например, на x86_64 такими будут 32-битные и 64-битные, а вот 16-битные и 8-битные инструкции будут тормозить, на x86 оптимальный размер переменной лишь один - 32 бита, на всяких ARM не знаю, но подозреваю, что тоже 32 бита). И уж точно быстрее выполняются обращения к выровненным данным. В свете этой информации int вполне может оказаться быстрее char, если у тебя не 8-битный процессор. А в оптимизации по скорости нет ничего зазорного на ПК, это только под микроконтроллеры компилируют с -Os.
Кстати, насчёт тормозов инструкций не той разрядности вполне есть пруф. Команды, работающие с 16-разрядными переменными на x86, кодируются с помощью специального префикса, а 32-разрядные - без него. Как следствие, процессор парсит команду дольше из-за этого самого лишнего байта префикса. И код получается жирнее из-за этих самых префиксов.
То есть сэкономив 2 байта и сделав 16-битную переменную вместо 32-битной на x86 ты потеряешь по байту на каждом обращении к ней (а обращаются к переменной как правило больше одного раза), а также немного скорости. Стоит ли игра свеч?
Зато стандарт более-менее гарантирует, что int будет иметь оптимальный размер для данной платформы (разве что на всяких восьмибитных микроконтроллерах int превышает размер машинного слова и поэтому char даст выигрыш), поэтому вполне разумно пихать его везде, где нет иных причин выбрать другой тип.
Исправление KivApple, :
прежде чем выделить int под счётчик от 0 до 10
Я вроде где-то слышал, что на некоторых (вполне возможно в том числе и x86) платформах наиболее быстро выполняются команды работы с переменными соответствующими разрядности процессора или кратные ей (например, на x86_64 такими будут 32-битные и 64-битные, а вот 16-битные и 8-битные инструкции будут тормозить, на x86 оптимальный размер переменной лишь один - 32 бита, на всяких ARM не знаю, но подозреваю, что тоже 32 бита). И уж точно быстрее выполняются обращения к выровненным данным. В свете этой информации int вполне может оказаться быстрее char, если у тебя не 8-битный процессор. А в оптимизации по скорости нет ничего зазорного на ПК, это только под микроконтроллеры компилируют с -Os.
Кстати, насчёт тормозов инструкций не той разрядности вполне есть пруф. Команды, работающие с 16-разрядными переменными на x86, кодируются с помощью специального префикса, а 32-разрядные - без него. Как следствие, процессор парсит команду дольше из-за этого самого лишнего байта префикса. И код получается жирнее из-за этих самых префиксов.
То есть сэкономив 2 байта и сделав 16-битную переменную вместо 32-битной на x86 ты потеряешь по байту на каждом обращении к ней (а обращаются к переменной как правило больше одного раза), а также немного скорости. Стоит ли игра свеч?
Исправление KivApple, :
прежде чем выделить int под счётчик от 0 до 10
Я вроде где-то слышал, что на некоторых (вполне возможно в том числе и x86) платформах наиболее быстро выполняются команды работы с переменными соответствующими разрядности процессора или кратные ей (например, на x86_64 такими будут 32-битные и 64-битные, а вот 16-битные и 8-битные инструкции будут тормозить). И уж точно быстрее выполняются обращения к выровненным данным. В свете этой информации int вполне может оказаться быстрее char, если у тебя не 8-битный процессор. А в оптимизации по скорости нет ничего зазорного на ПК, это только под микроконтроллеры компилируют с -Os.
Кстати, насчёт тормозов инструкций не той разрядности вполне есть пруф. Команды, работающие с 16-разрядными переменными на x86, кодируются с помощью специального префикса, а 32-разрядные - без него. Как следствие, процессор парсит команду дольше из-за этого самого лишнего байта префикса. И код получается жирнее из-за этих самых префиксов.
То есть сэкономив 2 байта и сделав 16-битную переменную вместо 32-битной на x86 ты потеряешь по байту на каждом обращении к ней (а обращаются к переменной как правило больше одного раза), а также немного скорости. Стоит ли игра свеч?
Исправление KivApple, :
прежде чем выделить int под счётчик от 0 до 10
Я вроде где-то слышал, что на некоторых (вполне возможно в том числе и x86) платформах наиболее быстро выполняются команды работы с переменными соответствующими разрядности процессора или кратные ей (например, на x86_64 такими будут 32-битные и 64-битные, а вот 16-битные и 8-битные инструкции будут тормозить). И уж точно быстрее выполняются обращения к выровненным данным. В свете этой информации int вполне может оказаться быстрее char, если у тебя не 8-битный процессор. А в оптимизации по скорости нет ничего зазорного на ПК, это только под микроконтроллеры компилируют с -Os.
Кстати, насчёт тормозов инструкций не той разрядности вполне есть пруф. Команды, работающие с 16-разрядными переменными на x86, кодируются с помощью специального префикса, а 32-разрядные - без него. Как следствие, процессор парсит команду дольше из-за этого самого лишнего байта префикса. И код получается жирнее из-за этих самых префиксов.
То есть сэкономив 2 байта и сделав 16-битную переменную вместо 32-битной на x86 ты потеряешь по байту на каждом обращении к ней (а обращаются к переменной как правило больше одного раза), а также немного скорости.
Исправление KivApple, :
прежде чем выделить int под счётчик от 0 до 10
Я вроде где-то слышал, что на некоторых (вполне возможно в том числе и x86) платформах наиболее быстро выполняются команды работы с переменными соответствующими разрядности процессора или кратные ей (например, на x86_64 такими будут 32-битные и 64-битные, а вот 16-битные и 8-битные инструкции будут тормозить). И уж точно быстрее выполняются обращения к выровненным данным. В свете этой информации int вполне может оказаться быстрее char, если у тебя не 8-битный процессор. А в оптимизации по скорости нет ничего зазорного на ПК, это только под микроконтроллеры компилируют с -Os.
Исправление KivApple, :
прежде чем выделить int под счётчик от 0 до 10
Я вроде где-то слышал, что на некоторых (вполне возможно в том числе и x86) платформах наиболее быстро выполняются команды работы с переменными соответствующими разрядности процессора. И уж точно быстрее выполняются обращения к выровненным данным. В свете этой информации int вполне может оказаться быстрее char, если у тебя не 8-битный процессор. А в оптимизации по скорости нет ничего зазорного на ПК, это только под микроконтроллеры компилируют с -Os.
Исходная версия KivApple, :
прежде чем выделить int под счётчик от 0 до 10
Я вроде где-то слышал, что на некоторых (вполне возможно в том числе и x86) платформах наиболее быстро выполняются команды работы со переменными соответствующими разрядности процессора. И уж точно быстрее выполняются обращения к выровненным данным. В свете этой информации int вполне может оказаться быстрее char, если у тебя не 8-битный процессор. А в оптимизации по скорости нет ничего зазорного на ПК, это только под микроконтроллеры компилируют с -Os.