LINUX.ORG.RU

История изменений

Исправление monk, (текущая версия) :

если там llvm, она мощно все соптимизирует и будет по сути работать с сырым указателем, взяв его только раз где надо.

Не может. Дескриптор выглядит так

struct 
{
  bool valid;
  T* p;
}

И вместо

*p = 1

получается

if(p.valid) { *p.p = 1; } else terminate(); 

Выкинуть проверку на valid llvm не может. Разве что в одном блоке несколько обращений подряд по одному дескриптору. И с массивом аналогично. Если в С++ использовать at, программа работает заметно медленнее.

Исходная версия monk, :

если там llvm, она мощно все соптимизирует и будет по сути работать с сырым указателем, взяв его только раз где надо.

Не может. Дескриптор выглядит так

struct 
{
  bool valid;
  T* p;
}

И вместо

*p = 1

получается

if(p.valid) { *p.p = 1; }

Выкинуть проверку на valid llvm не может. Разве что в одном блоке несколько обращений подряд по одному дескриптору. И с массивом аналогично. Если в С++ использовать at, программа работает заметно медленнее.