Тема: malloc -> new
Показать сообщение отдельно
  #13  
Старый 07.02.2023, 09:52
Nil A
Guest
 
Сообщений: n/a
По умолчанию Как бы так голдед зарефакторить?

Nil A написал(а) к Alexey Vissarionov в Feb 23 08:33:44 по местному времени:

Нello, Alexey!

Tuesday February 07 2023 08:08, from Alexey Vissarionov -> Nil A:

AV> Да, смысла в epoll() для файлов не очень много, но теоретически ничего
AV> не мешало: дескрипторы - они и есть дескрипторы.

С точки зрения внешнего API, возможно, им ничто не мешало повесить и сокеты, и файлы на epoll(), но внутри там это две совершенно разные подсистемы. В файлах не возможно вообще такое, что делаешь write(10 байт), а возвращается только 5 записано, слишком много переписывать надо.

Фейсбуки несколько лет назад влили io_uring фичу в кернел, что сделало возможным делать асинхронные файловые операции, без создания пула-тредов для операций, или асинхронщины на сигналах, которую нельзя использовать практически.

AV> На 64-битных системах с околоединичной вероятностью таки можно. Жалко
AV> только, что адресное пространство - это не реально доступная
AV> физическая память :-)

Проверять, вернул ли malloc() NULL на x86_64 довольно бестолково :-)

AV> Если не сможет подтянуть - SIGBUS. Если полезть по указателю в дальний
AV> космос - соответственно, SIGSEGV.

Всё проще, если адрес по которому обращаются не смапирован в процесс, то SIGSEGV, а если адрес валидный, но котовасия с подтягивании странички, то SIGBUS.
Жирный маллок уйдёт в mmap, и там всё валидно, с точки зрения адресов как раз.

Best Regards, Nil
--- GoldED+/LNX 1.1.5
Ответить с цитированием