Одна вещь, которую я удивляюсь, еще не упоминалась, это то, что реализация Runnable
делает ваш класс более гибким.
Если вы расширяете поток, то действие, которое вы делаете, всегда будет в потоке. Однако, если вы реализуете Runnable
, этого не должно быть. Вы можете запустить его в потоке, или передать его какому-либо сервису-исполнителю, или просто передать как задачу в рамках одного многопоточного приложения (возможно, для запуска в более позднее время, но в том же потоке). Опции гораздо более открыты, если вы просто используете Runnable
, чем если вы привязываете себя к Thread
.
Обычно данные выравниваются для повышения производительности. Для большинства процессоров доступ к памяти имеет некоторые недостатки, если не осуществляется доступ к определенным границам байтов. Для других ассемблеров часто используется какая-то псевдооперация .align
. Большинство компиляторов также выравнивают свои структуры данных (хотя вы можете отключить это для целей отладки).
Также см. Эту запись в Википедии .
Обратите внимание, что неэмулированные системы MIPS могут даже дать сбой, если вы попытаетесь доступ к невыровненным ячейкам памяти (см. здесь и здесь ).
Есть ли аналогичные инструкции в других ассемблерах?
MASM имеет директиву Align: http://msdn.microsoft.com/en-us/library/dwa9fwef (VS .80) .aspx
Он выравнивает все в энной степени двойки. Это не инструкция, это директива, которая будет преобразована в инструкции
Что касается ее использования, например:
инструкции mips32 всегда имеют длину 32 бита. Таким образом, каждая инструкция должна начинаться с границы слова. Добавление директивы .align перед запуском кода выравнивает все до 32 бит. Это имеет много преимуществ, в том числе то, что для выборки инструкции требуется только 1 доступ к памяти, и что это, вероятно, будет полезно для кеша инструкций.