Возможно, вы не до конца понимаете разницу между этими наборами функций.
Первый набор функций, функции выделения, используются Vulkan для выделения памяти ЦП ... большую часть времени.Две другие функции, внутренние функции уведомления, предназначены для других случаев.
Смотрите, бывают случаи, когда реализация Vulkan должна выполнять системные системные вызовы для выделения памяти.Спецификация Vulkan распознает такой случай: выделить «исполняемую память»: память, содержащую коды операций для набора команд ЦП.По соображениям безопасности ОС не позволяют просто выполнять произвольные адреса памяти;современные ОС требуют, чтобы большинство приложений выделяло память особым образом, чтобы она была исполняемой.Следовательно:
Приложение не должно обрабатывать выделение памяти, предназначенной для выполнения хостом, из-за сложности реализации различных защит на разных платформах.Реализация будет выделять такую память внутренне и вызывать информационный обратный вызов приложения, когда эти внутренние выделения выделены и освобождены.
Обычные функции выделения памяти, такие как ::operator new
или malloc
, не могут этого сделать.И спецификация Vulkan не предполагает, что клиентский код сможет выполнять эти системные вызовы.
Однако клиентскому коду, возможно, потребуется иметь возможность отслеживать такие выделения, чтобы он могможет знать, сколько памяти хранит реализация Vulkan.Поэтому, когда «внутренние выделения» сделаны / освобождены, вызываются внутренние функции уведомления.
Это только время , такие функции вызываются.
Так что если вашцель состоит в том, чтобы просто отслеживать, когда распределения реализации выполняются / освобождаются, только внутренние функции уведомления не будут выполнять работу.Вы должны переопределить их все, что означает, что вам действительно нужно выполнить распределение / перераспределение / освобождение.