new vs. malloc
От: _NN_ www.nemerleweb.com
Дата: 23.04.18 21:58
Оценка:
В MSVC malloc определяется так (пропуская несущественную часть):

__declspec(restrict) void * __cdecl malloc(_In_ size_t _Size);


Однако operator new определён без __declspec(restrict).
Из-за этого компилятор может произвести оптимизацию в случае использования malloc, но не может с new.
Можно проверить через флаг /Qvec-report:2

Кто знает, почему стандарт не требует возвращать указатель на не перекрывающиеся данные в 'new' в отличии от malloc ?

P.S.
Если вручную определить в своём проекте new, то можем получить существенное ускорение:
__declspec(restrict) void* operator new(size_t n)
{
    return malloc(n);
}
http://rsdn.nemerleweb.com
http://nemerleweb.com
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.