Общее руководство от Microsoft здесь:
http://msdn.microsoft.com/en-us/library/ms229002.aspx
Автоматические свойства в C # великолепны, и я использую их тогда, когда могу, но есть случаи, когда они не работают для меня, например, при проверке типа или значения в методе set.
В общем: используйте верблюжий корпус и не ставьте свое имя перед префиксом типа подчеркивания или префикса типа.
public int Age {get; set;}
или
private int age;
public int Age
{
get { return age; }
set
{
if(value < 0)
throw new InvalidOperationException("Age > 0");
age = value;
}
}
Несмотря на то, что префикс блокировки не требует выравнивания памяти, а операция cmpxchg, которая, вероятно, используется для реализации InterlockedExchange (), не требует выравнивания, если ОС включила проверку выравнивания, тогда cmpxchg вызовет исключение проверки выравнивания (AC) при выполнении с невыровненными операндами. Ознакомьтесь с документацией для cmpxchg и т.п., просмотрев список исключений защищенного режима. Я не знаю наверняка, поддерживает ли Windows проверку выравнивания, но меня это не удивит.
Я хочу дополнить этот ответ следующим утверждением - я ничего не знаю о Фортране или Matlab
Однако я думаю, что вы почти отвечаете на свой вопрос в своем вопросе.
Зачем вам это? не использовать научный язык для написания ядра. Вы бы использовали наиболее подходящий язык для поставленной задачи. Ядро лучше всего писать на C, так как оно лучше подходит для работы с низкоуровневыми задачами, такими как ядра (работа с управлением памятью и т. Д.)
Ядро не является научным приложением, поэтому вы не будете использовать научный язык.
Опять же, возможно, я совершенно ошибаюсь, но я думаю, что это очень логичный ответ.
оптимизирован за счет возможности блокировки кеша и предотвращения полной блокировки шины к основной памяти). CAN выполняет 8-битные операции с блокировкой.Я чуть не забыл, из Intel TBB , они определяют загрузку / сохранение 8-битных без использования неявной или явной блокировки (в некоторых случаях );
.code
ALIGN 4
PUBLIC c __TBB_machine_load8
__TBB_machine_Load8:
; If location is on stack, compiler may have failed to align it correctly, so we do dynamic check.
mov ecx,4[esp]
test ecx,7
jne load_slow
; Load within a cache line
sub esp,12
fild qword ptr [ecx]
fistp qword ptr [esp]
mov eax,[esp]
mov edx,4[esp]
add esp,12
ret
EXTRN __TBB_machine_store8_slow:PROC
.code
ALIGN 4
PUBLIC c __TBB_machine_store8
__TBB_machine_Store8:
; If location is on stack, compiler may have failed to align it correctly, so we do dynamic check.
mov ecx,4[esp]
test ecx,7
jne __TBB_machine_store8_slow ;; tail call to tbb_misc.cpp
fild qword ptr 8[esp]
fistp qword ptr [ecx]
ret
end
В любом случае, надеюсь, что это немного прояснит для вас.
Когда-то давно Microsoft поддерживала WindowsNT на процессорах, отличных от x86, таких как MIPS, PowerPC и Alpha. Все эти процессоры требуют согласования для их взаимосвязанных инструкций, поэтому Microsoft поместила требование в свои спецификации, чтобы гарантировать, что эти примитивы будут переносимы на разные архитектуры.