История изменений
Исправление shdown, (текущая версия) :
А я вот всё-таки прокомментирую.
Деньги на любое железо там есть и крайне критична точность и скорость ответа, которую подобны тебе выдувают в дуду, многократно перепроверяя malloc на NULL, и усирая кеш «если таки NULL то вот простынка кода».
Во-первых, оверхед от самого malloc не может сравниться с проверкой на NULL ни в коем случае. Как минимум malloс должен залочить арену, а для этого нужно взять futex, потом его отпустить (это уже две атомарных операции). А ещё обойти свои структуры данных, что часто, как раз-таки, плохо по кэшу. А в худшем случае он сделает системный вызов.
Во-вторых, эти проверки будут хорошо предсказываться branch predictor’ом. Если используется C++, то, скорее всего, там вообще бросается исключение и malloc на NULL проверяется только один раз. А код для случая «вылетело исключение» компилятор как раз помещает в самую жопу.
Почти наверняка у вас в коде-гайде ещё забито «обнулять память после malloc», потому-что это обязательное следствие «всегда проверять malloc и откатывать при NULL».
И почему же это «обязательное следствие»? Типа, убедиться, что ядро эти страницы виртуальной памяти связало с физическими? Наркоман штоле?
Исходная версия shdown, :
А я вот всё-таки прокомментирую.
Деньги на любое железо там есть и крайне критична точность и скорость ответа, которую подобны тебе выдувают в дуду, многократно перепроверяя malloc на NULL, и усирая кеш «если таки NULL то вот простынка кода».
Во-первых, оверхед от самого malloc не может сравниться с проверкой на NULL ни в коем случае. Как минимум malloс должен залочить арену, а для этого нужно взять futex, потом его отпустить (это уже две атомарных операции). А ещё обойти свои структуры данных, что часто, как раз-таки, плохо по кэшу. А в худшем случае он сделает системный вызов.
Кроме того, эти проверки будут хорошо предсказываться branch predictor’ом. Если используется C++, то, скорее всего, там вообще бросается исключение и malloc на NULL проверяется только один раз.
Почти наверняка у вас в коде-гайде ещё забито «обнулять память после malloc», потому-что это обязательное следствие «всегда проверять malloc и откатывать при NULL».
И почему же это «обязательное следствие»? Типа, убедиться, что ядро эти страницы виртуальной памяти связало с физическими? Наркоман штоле?