Если вы хотите, чтобы структура имела определенный размер с GCC, например, используйте __attribute__((packed))
.
В Windows вы можете установить выравнивание в один байт при использовании cl .exe компилятор с опцией / Zp .
Обычно ЦП получает доступ к данным, который является кратным 4 (или 8), зависящей от платформы, а также от компилятор.
Итак, это вопрос выравнивания в основном.
У вас должны быть веские причины для его изменения.
Нет, изменение типа петли не имеет значения.
Единственное, что может сделать это быстрее, это иметь меньше вложенности циклов и циклически перебирать меньшие значения.
Единственная разница между циклом for
и циклом while
заключается в синтаксисе их определения. Там нет никакой разницы в производительности вообще.
int i = 0;
while (i < 20){
// do stuff
i++;
}
То же самое, что:
for (int i = 0; i < 20; i++){
// do Stuff
}
(На самом деле цикл for немного лучше, потому что i
будет вне области видимости после цикла, а i
будет придерживаться примерно в случае цикла while
.)
Цикл for - это синтаксически более симпатичный способ зацикливания.
В то время как цикл Loop и For одинаковы
http://www.mkyong.com/java/ while-loop-for-loop-and-iterator-performance-test-java/
Это имеет значение, только если вы используете многопоточное или многопроцессорное программирование. Тогда это также зависит от того, как вы назначаете циклы различным процессорам / потокам.
Посмотри на свой алгоритм! Знаете ли вы заранее, какие значения из вашего массива добавляются более одного раза?
Если вы знаете, что можете уменьшить количество циклов и это приведет к лучшей производительности.
Даже если бы гипотеза о том, что цикл while быстрее, чем цикл for, была верной (а это не так), циклы, которые вам пришлось бы изменять / оптимизировать, были бы не внешними, а внутренними, потому что они выполняется больше раз.
Вы не можете оптимизировать его, изменив его на while.
Вы можете просто увеличить скорость очень, очень, очень мало, изменив линию
for (int k = 0; k < length - 1; k++) {
на
for (int k = 0; k < lengthMinusOne; k++) {
, где lengthMinusOne вычисляется до
, это вычитание равно просто вычисляю почти (200x201 / 2) x (200-1) раз, а для компьютера это очень мало:)
Нет, вы все еще повторяете в цикле точно такое же число раз. Это не имело бы никакого значения.
The difference between for and while is semantic :
It is a way to help other to understand your code. You are not obliged not to modify for loop variables, but it is a common (and good) practice.
Такая микрооптимизация бессмысленна.